home *** CD-ROM | disk | FTP | other *** search
/ Aminet 45 / Aminet 45 (2001)(GTI - Schatztruhe)[!][Oct 2001].iso / Aminet / dev / e / 2b_CrtvE_src.lha / assembler.s < prev    next >
Text File  |  2001-07-05  |  75KB  |  3,996 lines

  1. ;; Assembler part
  2.  
  3. ; ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ;
  4. ;   The ASSEMBLER part !!!!!!!              ;
  5. ; ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ;
  6. ;; Parse
  7. ASM_PARSE:
  8.     MOVE.L  #ASM_KWORDS,D2
  9.     MOVE.L  A2,D0
  10.     MOVE.L  (A2),D1
  11.     AND.L   #$FFFFFF00,D1
  12.     CMP.L   #'PC'*$10000,D1
  13.     BEQ ASM_PC
  14.  
  15. ;; Check for keywords
  16.     MOVE.L  HASHVAL(PC),D7
  17.     LSL.L   #2,D7
  18.     ADD.L   #AKWHASH,D7
  19.     MOVE.L  D7,A6
  20. .LOOPZ:
  21.     MOVE.L  (A6),A6
  22.     MOVE.L  A6,D6
  23.     BEQ     .SKIP_GO1
  24.     MOVE.L  (A6)+,A4
  25.     MOVE.L  D0,A2
  26. .3Z:CMPM.B  (A4)+,(A2)+
  27.     BNE     .LOOPZ
  28.     TST.B   -1(A2)
  29.     BNE     .3Z
  30.     SUB.L   D2,D6
  31.     LSR.L   #3,D6
  32.     MOVEQ   #47,D4
  33.     MOVE.W  D4,(A1)+
  34.     MOVE.W  D6,(A1)+
  35.     MOVEQ   #-1,D0
  36.     RTS
  37. ;*-*
  38. ;; Check for commands
  39. .SKIP_GO1:
  40.     TST.W   GENERATE_PPC
  41.     BNE     .2
  42. .2BACK:
  43.     MOVE.L  #ASM_INSTAB,D2
  44.     MOVE.L  HASHVAL(PC),D7
  45.     LSL.L   #2,D7
  46.     ADD.L   #ASMHASH,D7
  47.     MOVE.L  D7,A6
  48. .LOOP:
  49.     MOVE.L  (A6),A6         ; A6 _NOW_ POINTS TO ENTRY IN INSTABLE
  50.     MOVE.L  A6,D6
  51.     BNE     .33
  52.     TST.W   GENERATE_PPC
  53.     BNE     .FAIL
  54.     BRA     .2
  55. .33:
  56.     MOVE.L  (A6)+,A4
  57.     MOVE.L  D0,A2
  58. .3: CMPM.B  (A4)+,(A2)+
  59.     BNE.S   .LOOP
  60.     TST.B   -1(A2)
  61.     BNE.S   .3
  62.     SUB.L   D2,D6
  63.     LSR.L   #3,D6
  64.     MOVE.L  D6,D0           ; D0=1..112
  65.     ADD.L   #$100,D0
  66. ;*-*
  67. ;; Check for sizes
  68.     TST.W   GENERATE_PPC
  69.     BNE     iERROR98
  70.     MOVEQ   #0,D1
  71.     CMP.B   #'.',(A0)       ; SEE IF THERE'S A:     .B .W .L .S
  72.     BNE.S   .4
  73.     ADDQ.L  #1,A0
  74.     MOVE.B  (A0)+,D2
  75.     LEA     .SIZES(PC),A6
  76.     MOVEQ   #7,D4
  77. .CHKSIZE:
  78.     ADDQ.L  #1,D1
  79.     CMP.B   (A6)+,D2
  80.     BEQ     .4
  81.     DBF     D4,.CHKSIZE
  82.     BRA     iERROR31
  83. .4: MOVE.W  D0,D4
  84.     MOVE.W  D0,(A1)+
  85.     MOVE.W  D1,(A1)+
  86.     RTS
  87. .SIZES:
  88.     DC.B    "BWLSXPDQ",0,0
  89. ;*-*
  90. ;; Check for ppc commands
  91. .2:
  92.     MOVE.L  #PPC_INSTAB,D2
  93.     MOVE.L  HASHVAL(PC),D7
  94.     LSL.L   #2,D7
  95.     ADD.L   #PPCHASH,D7
  96.     MOVE.L  D7,A6
  97. .PLOOP:
  98.     MOVE.L  (A6),A6         ; A6 _NOW_ POINTS TO ENTRY IN INSTABLE
  99.     MOVE.L  A6,D6
  100.     BNE     .P2
  101.     TST.W   GENERATE_PPC
  102.     BEQ     .FAIL
  103.     BRA     .2BACK
  104. .P2:
  105.     MOVE.L  (A6)+,A4
  106.     MOVE.L  D0,A2
  107. .P3:CMPM.B  (A4)+,(A2)+
  108.     BNE.S   .PLOOP
  109.     TST.B   -1(A2)
  110.     BNE.S   .P3
  111.     SUB.L   D2,D6
  112.     LSR.L   #3,D6
  113.     MOVE.L  D6,D0
  114.     MOVEQ   #48,D4
  115.     MOVE.W  D4,(A1)+
  116.     MOVE.L  D0,(A1)+
  117.     CMP.B   #".",(A0)
  118.     SEQ     D0
  119.     EXT.W   D0
  120.     MOVE.W  D0,(A1)+
  121.     neg.w   d0
  122.     add.w   d0,a0
  123.     TST.W   GENERATE_PPC
  124.     BEQ iERROR99
  125.     MOVEQ   #-1,D0
  126.     RTS
  127. ;*-*
  128. ;; Fail
  129. .FAIL:
  130.     MOVE.L  WORK(PC),A2
  131.     MOVEQ   #0,D0           ; 0=FAIL, ELSE=ISASM
  132.     RTS
  133. ;*-*
  134. ;*-*
  135. ;; PC
  136. ASM_PC:
  137.     CMP.W   #17,D4
  138.     BNE .2
  139.     CMP.B   #')',(A0)
  140.     BEQ.S   .1
  141. .2:
  142.     MOVE.W  #$E00,D4
  143.     MOVE.W  D4,(A1)+
  144.     MOVEQ   #-1,D0
  145.     RTS
  146. .1: CMP.W   #17,D4          ;-(A1)
  147.     BNE iERROR19
  148.     SUBQ.L  #2,A1
  149.     ADDQ.L  #1,A0
  150.     SUBQ.W  #1,PARSEBRACKET
  151.     MOVE.W  #$D00,D4
  152.     MOVE.W  D4,(A1)+
  153.     MOVEQ   #-1,D0
  154.     RTS
  155. ;*-*
  156. ;; IMM
  157. ASM_PARSEIMM:
  158.     BTST    #7,CODEPREFS+1
  159.     BEQ.S   .1
  160.     MOVE.L  STARTINTERIM(PC),A6
  161.     SUBQ.L  #2,A6
  162.     CMPA.L  A6,A1
  163.     BEQ PREP
  164. .1: MOVE.W  #$F00,D4
  165.     MOVE.W  D4,(A1)+        ; 11+4
  166.     BRA PARSELOOP
  167. ;*-*
  168. ;; ParseReg
  169. ASM_PARSEREG:
  170.     CMP.B   #0,2(A2)
  171.     BNE REGBACK
  172.     MOVE.B  (A2),D1         ; D1="A" OR "D"
  173.     CMP.B   #'D',D1
  174.     BEQ.S   .1
  175.     CMP.B   #'A',D1
  176.     BNE REGBACK
  177. .1: MOVEQ   #0,D0
  178.     MOVE.B  1(A2),D0        ; D0="0" .. "9"
  179.     SUB.W   #48,D0
  180.     MOVE.L  D0,D7           ; =>COPY
  181.     CMP.W   #8,D0
  182.     BPL iERROR19
  183.     CMP.B   #'A',D1
  184.     BEQ .2
  185.     MOVEQ   #0,D3           ; D3=ADR.MOD NR.
  186.     BRA.S   .EXIT           ; --> Dx
  187. .2: CMP.W   #17,D4          ;-2(A1)
  188.     BEQ.S   .3
  189. .6: BSET    #3,D0           ; --> Ax
  190.     MOVEQ   #1,D3
  191.     BRA.S   .EXIT
  192. .3: CMP.B   #')',(A0)
  193.     BNE.S   .6
  194.     SUBQ.L  #2,A1
  195.     ADDQ.L  #1,A0
  196.     SUBQ.W  #1,PARSEBRACKET
  197.     CMP.W   #8,-2(A1)
  198.     BEQ.S   .4
  199. .7: CMP.B   #'+',(A0)
  200.     BEQ.S   .5
  201.     BSET    #4,D0           ; --> (Ax)
  202.     MOVEQ   #2,D3
  203.     BRA.S   .EXIT
  204. .4: CMP.L   #$10000,-6(A1)
  205.     BEQ.S   .7
  206.     SUBQ.L  #2,A1           ; --> -(Ax)
  207.     MOVEQ   #4,D3
  208.     BSET    #5,D0
  209.     BRA.S   .EXIT
  210. .5: ADDQ.L  #1,A0           ; --> (Ax)+
  211.     MOVEQ   #3,D3
  212.     ADD.W   #%11000,D0
  213.     BRA .EXIT
  214.  
  215. .EXIT:  ASL.W   #8,D3
  216.     ADD.W   #$400,D3
  217.     CMP.W   #4,D7
  218.     BEQ.S   .8
  219.     CMP.W   #5,D7
  220.     BEQ.S   .8
  221. .9: ADD.W   D3,D0
  222.     MOVE.W  D0,D4
  223.     MOVE.W  D0,(A1)+
  224.     MOVE.L  WORK(PC),A2
  225.     BRA PARSELOOP
  226. .8: CMP.W   #$400,D3
  227.     BEQ.S   .9
  228.     BSET    #0,WARNINGS+3       ; ISSUE A4/A5 USED WARNING
  229.     BRA.S   .9
  230. ;*-*
  231.  
  232. ;; Hash
  233. MAKEASMHASH:
  234.     MOVE.L  #ASMHASH,A0     ; A0=TABEL
  235.     LEA ASM_INSTAB,A1
  236.     MOVE.L  A0,A2
  237.     MOVE.L  #255,D0
  238. .CL:
  239.     CLR.L   (A2)+           ; CLEAR TABLE
  240.     DBRA    D0,.CL
  241. .LOOP:
  242.     MOVE.L  (A1),D0
  243.     BEQ.S   EX_KWORDS
  244.     MOVE.L  D0,A2
  245.     HASH    A2,D0,D1
  246.     LSL.L   #2,D0
  247.     LEA 0(A0,D0.L),A2
  248.     MOVE.L  (A2),D0         ; READ PREVIOUS LIST (OR NIL)
  249.     MOVE.L  A1,(A2)         ; PUT ENTRY IN LIST
  250.     MOVE.L  D0,4(A1)        ; AND LINK TAIL TO IT
  251.     ADDQ.L  #8,A1
  252.     BRA.S   .LOOP
  253. EX_KWORDS:
  254.     MOVE.L  #AKWHASH,A0     ; A0=TABEL
  255.     LEA     ASM_KWORDS,A1
  256.     MOVE.L  A0,A2
  257.     MOVE.L  #255,D0
  258. .CLX:
  259.     CLR.L   (A2)+           ; CLEAR TABLE
  260.     DBRA    D0,.CLX
  261. .LOOPX:
  262.     MOVE.L  (A1),D0
  263.     BEQ.S   PPCASMHASH
  264.     MOVE.L  D0,A2
  265.     HASH    A2,D0,D1
  266.     LSL.L   #2,D0
  267.     LEA     0(A0,D0.L),A2
  268.     MOVE.L  (A2),D0         ; READ PREVIOUS LIST (OR NIL)
  269.     MOVE.L  A1,(A2)         ; PUT ENTRY IN LIST
  270.     MOVE.L  D0,4(A1)        ; AND LINK TAIL TO IT
  271.     ADDQ.L  #8,A1
  272.     BRA.S   .LOOPX
  273. PPCASMHASH:
  274.     MOVE.L  #PPCHASH,A0     ; A0=TABEL
  275.     LEA     PPC_INSTAB,A1
  276.     MOVE.L  A0,A2
  277.     MOVE.L  #255,D0
  278. .CLX:
  279.     CLR.L   (A2)+
  280.     DBRA    D0,.CLX
  281. .LOOPX:
  282.     MOVE.L  (A1),D0
  283.     BEQ.S   .EXX
  284.     MOVE.L  D0,A2
  285.     HASH    A2,D0,D1
  286.     LSL.L   #2,D0
  287.     LEA     0(A0,D0.L),A2
  288.     MOVE.L  (A2),D0
  289.     MOVE.L  A1,(A2)
  290.     MOVE.L  D0,4(A1)
  291.     ADDQ.L  #8,A1
  292.     BRA.S   .LOOPX
  293. .EXX:
  294.     RTS
  295. ;*-*
  296. ;*-*
  297. ;;ASM
  298.  
  299. ASM_COMPILE:          ; GETS INSCODE IN D7
  300.     MOVEM.L A2/A5,-(A7)     ; JUST A3-A4 STAY PRESERVED
  301.     MOVEQ   #0,D0
  302.     MOVE.W  D7,D0           ; D0=INSNR/ADDRESSMODENR
  303.     cmp.w   #$0f00,d0
  304.     beq     iERROR12
  305.     MOVEQ   #0,D1
  306.     SUB.W   #$100,D0
  307.     MOVE.W  (A3)+,D1
  308.     LEA ASM_INSJOB,A0
  309.     LSL.L   #2,D0
  310.     ADD.L   D0,A0
  311.     MOVE.L  (A0),A0         ; A0=JOBTAB ENTRY
  312.     MOVE.L  A4,A1           ; A1=ptr START INS IN A4
  313.     MOVE.W  (A0)+,(A4)+
  314. ASM_LOOP:
  315.     MOVEQ   #0,D7
  316.     MOVE.W  (A0)+,D7
  317.     BEQ.S   .1
  318.     SUBQ.L  #1,D7
  319.     LSL.L   #2,D7
  320.     MOVE.L  ASM_JOBROUTINES(PC,D7.L),A2
  321.     JSR (A2)
  322.     BRA.S   ASM_LOOP
  323. .1: MOVEM.L (A7)+,A2/A5
  324.     RTS
  325.  
  326. ASM_STOP:             ; EN JOBCODE PROCESSING
  327.     LEA .1(PC),A0
  328.     RTS
  329. .1: DC.W    0
  330.  
  331. SKIP244:
  332.     CMP.W   #44,(A3)
  333.     BNE.S   *+4
  334.     ADDQ.L  #4,A3
  335.     RTS
  336.  
  337.  
  338. XR:
  339.     BSR SKIP244
  340.  
  341. ;; a:REG
  342. ASM_REGID:
  343.     CMP.W   #IDENT,(A3)
  344.     BNE.S   .1
  345.     MOVE.L  A0,-(A7)
  346.     MOVE.L  2(A3),A0
  347.     BTST    #3,5(A0)
  348.     BEQ.S   .2
  349.     MOVE.L  D0,-(A7)
  350.     MOVE.W  #$400,D0
  351.     OR.W    10(A0),D0
  352.     MOVE.W  D0,(A3)
  353.     MOVE.L  #$2C002C,2(A3)
  354.     MOVE.L  (A7)+,D0
  355. .2: MOVE.L  (A7)+,A0
  356. .1: RTS
  357. ;*-*
  358.  
  359. ASM_JOBROUTINES:
  360.     DC.L    ASM_NOTIMPL,ASM_PUTSIZE,ASM_PUTSIZEMOVE,ASM_DOEA
  361.     DC.L    ASM_DOEAMOVEDEST,ASM_COMMA,ASM_ADDSUB,ASM_MOVEQ,ASM_ASQ
  362.     DC.L    ASM_BCC,ASM_DBCC,ASM_GETADRREG,ASM_SHIFT,ASM_DATAREG
  363.     DC.L    ASM_BIT,ASM_SIZEA,ASM_SIZEE,ASM_XREG,ASM_DOEXG
  364.     DC.L    ASM_CMPM,ASM_MOVEM,ASM_TRAP,ASM_MOVEP,ASM_CMPI
  365.     DC.L    ASM_CPUSUP,ASM_SIZEFIXED,ASM_SIZE0,ASM_SIZEO
  366.     DC.L    ASM_MONADIC,ASM_FPUSUP,ASM_46EMUL,ASM_DYADIC
  367.     DC.L    ASM_MMUSUP,ASM_COPY,ASM_FMOVE,ASM_FMOVECR
  368.     DC.L    ASM_FMOVEM,ASM_FSINCOS,ASM_TRAPCC,ASM_FTST
  369.     DC.L    ASM_PMMSTD,ASM_PMMLDX,ASM_PMMTST,ASM_PMMMOVE,ASM_PMMEA
  370.     DC.L    ASM_IMM3B,ASM_MOVEC,ASM_MOVES,ASM_BITFIELD1,ASM_BITFIELD2
  371.     DC.L    ASM_BITFIELD3,ASM_MULDIV,ASM_LINK,ASM_CPCACHE040,ASM_MOVE16
  372.     DC.L    ASM_PULSE,ASM_MOVE,ASM_ANDI,ASM_EORI,ASM_ORI
  373.  
  374. ;; Not implemented      1
  375. ASM_NOTIMPL:          ; 1
  376.     BRA iERROR87      ; TEMP
  377. ;*-*
  378. ;; Put size             2
  379. ASM_PUTSIZE:          ; 2
  380.     TST.L   D1
  381.     BNE     .EXISTS
  382.     MOVE.W  (A0),D1
  383. .EXISTS:
  384.     ADDQ.L  #2,A0
  385.     MOVE.W  (A0)+,D2
  386.     MOVE.L  D1,D0
  387.     SUBQ.L  #1,D0
  388.     BTST    D0,D2
  389.     BEQ     iERROR79         ; 1=B,2=W,3=L...
  390.  
  391.     MOVE.W  (A0)+,D2        ; FIND OFFSET
  392.     LSL.L   D2,D0
  393.     OR.W    D0,(A1)         ; PUT IN INS.WORD
  394.     RTS
  395. ;*-*
  396. ;; Put size (move)      3
  397. ASM_PUTSIZEMOVE:          ; 3
  398.     TST.L   D1
  399.     BNE     .EXISTS
  400.     MOVE.W  (A0),D1
  401. .EXISTS:
  402.     MOVE.L  D1,D0
  403.     sUBQ.L  #1,D0
  404.     ADDQ.L  #2,A0
  405.     MOVE.W  (A0)+,D2
  406.     btst    d0,d2
  407.     beq     iERROR79
  408.  
  409.     MOVE.L  D1,D0
  410.     CMP.W   #1,D0
  411.     BEQ.S   .1
  412.     BCHG    #0,D0
  413. .1: MOVE.W  (A0)+,D2        ; FIND OFFSET
  414.     LSL.L   D2,D0
  415.     OR.W    D0,(A1)         ; PUT IN INS.WORD
  416.     RTS
  417. ;*-*
  418. ;; EA                   4
  419. ASM_DOEA:             ; 4
  420.     BSR.W   ASM_GETEA
  421.     MOVE.W  (A0)+,D2
  422.     BTST    D0,D2
  423.     BEQ iERROR19
  424.     MOVE.W  (A0)+,D2
  425.     TST.W   D2
  426.     BMI.S   .1          ; OFFS=-1 --> NO OR.W EA
  427.     LSL.W   D2,D3
  428.     OR.W    D3,(A1)
  429. .1: RTS
  430. ;*-*
  431. ;; EA (move dest)       5
  432. ASM_DOEAMOVEDEST:         ; 5  MASK IN D3, # IN D0
  433.     BSR.W   ASM_GETEA
  434.     MOVE.W  (A0)+,D2
  435.     BTST    D0,D2
  436.     BEQ iERROR19
  437.     MOVE.L  D3,D0
  438.     LSR.W   #3,D3           ; UPPER BITS
  439.     AND.W   #%111,D0        ; LOWER
  440.     LSL.W   #3,D0
  441.     ADD.W   D3,D0           ; SWAPPED REGISTER AND MODE FIELDS
  442.     MOVE.W  (A0)+,D2
  443.     LSL.W   D2,D0
  444.     OR.W    D0,(A1)
  445.     RTS
  446. ;*-*
  447. ;; Comma                6
  448. ASM_COMMA:            ; 6
  449.     CMP.W   #COM,(A3)+
  450.     BNE iERROR5
  451.     RTS
  452. ;*-*
  453. ;; Add/Sub              7
  454. ASM_ADDSUB:           ; 7
  455.     BSR ASM_REGID
  456.     MOVE.B  (A3),D2
  457.     CMP.B   #4,D2
  458.     BEQ.S   .1
  459.     CMP.B   #15,D2
  460.     BEQ.S   .3
  461. .2: BSR.W   ASM_GETEA       ; EA --> Dx
  462.     BSR SKIP244
  463.     OR.W    D3,(A1)
  464.     BSR.S   ASM_COMMA
  465.     CMP.B   #5,(A3)
  466.     BEQ.S   .4
  467.     MOVEQ   #9,D0
  468.     BSR.W   ASM_GETDATAREG
  469.     ADDQ.L  #2,A0
  470.     RTS
  471. .1: CMP.W   #44,2(A3)
  472.     BEQ.W   .S
  473.     ADDQ.L  #4,A3
  474.     BSR ASM_REGID
  475.     MOVE.B  (A3),D0
  476.     SUBQ.L  #4,A3
  477.     CMP.B   #4,D0
  478.     BEQ.S   .2
  479.     CMP.B   #5,D0
  480.     BEQ.S   .2
  481. .SB:    MOVEQ   #9,D0
  482.     BSR.W   ASM_GETDATAREG      ; Dx --> EA
  483.     BSR.S   ASM_COMMA
  484.     MOVEQ   #0,D7
  485.     BSR.W   ASM_ANYEA
  486.     CMP.W   #8,D3           ; FROM DX TO DX, ALWAYS DEST.
  487.     BMI.S   .DXDX
  488.     BSET    #0,(A1)
  489. .DXDX:  ADDQ.L  #2,A0
  490.     RTS
  491. .3: BSR ASM_GETEA       ; #x --> EA
  492.     BSR ASM_COMMA
  493.     CMP.B   #5,(A3)
  494.     BEQ.S   .8
  495.     BSR ASM_GETEA
  496.     OR.W    D3,(A1)
  497.     MOVE.B  (A0)+,(A1)
  498.     ADDQ.L  #1,A0
  499.     MOVE.W  #DEST,D2
  500.     BTST    D0,D2
  501.     BEQ iERROR19
  502.     RTS
  503. .4: MOVE.B  (A1),D6         ; EA --> Ax
  504.     CMP.B   #13*16,D6
  505.     BEQ.S   .5
  506.     CMP.B   #9*16,D6
  507.     BNE iERROR19
  508. .5: MOVE.W  (A3)+,D6
  509.     AND.W   #7,D6
  510.     LSL.W   #1,D6
  511.     OR.B    D6,(A1)
  512.     MOVE.W  (A1),D6
  513.     AND.W   #%11000000,D6
  514.     TST.W   D6
  515.     BEQ iERROR31
  516.     BTST    #7,D6
  517.     BEQ.S   .7
  518.     BSET    #0,(A1)
  519. .7: OR.B    #%11000000,1(A1)
  520.     ADDQ.L  #2,A0
  521.     RTS
  522. .8: OR.W    #%111100,(A1)
  523.     BRA.S   .4
  524. .S: ADDQ.L  #8,A3
  525.     BSR ASM_REGID
  526.     MOVE.B  (A3),D0
  527.     SUBQ.L  #8,A3
  528.     CMP.B   #4,D0
  529.     BEQ.W   .2
  530.     CMP.B   #5,D0
  531.     BEQ.W   .2
  532.     BRA.W   .SB
  533. ;*-*
  534. ;; Moveq                8
  535. ASM_MOVEQ:            ; 8
  536.     CMP.W   #$0F00,(A3)+
  537.     BNE iERROR30
  538.  
  539.     MOVEM.L A0/D1,-(A7)
  540.     CMP.W   #LIBC,(A3)
  541.     BNE .1_1
  542.     ADDQ.L  #4,A3
  543.     MOVE.W  (A3)+,D1
  544.     EXT.L   D1
  545.     ADDQ.L  #8,A3
  546.     MOVEQ   #0,D0
  547.     BRA .1_2
  548. .1_1:
  549.     BSR ASM_GRABVALUE
  550. .1_2:
  551.     TST.L   D0
  552.     BMI iERROR30
  553.     MOVE.L  D1,D0
  554.     MOVEM.L (A7)+,A0/D1
  555.  
  556.     CMP.L   #128,D0
  557.     BPL iERROR31
  558.     CMP.L   #-127,D0
  559.     BMI iERROR31
  560.     MOVE.B  D0,1(A1)
  561.     BSR.W   ASM_COMMA
  562.     MOVEQ   #9,D0
  563.     BSR     ASM_GETDATAREG
  564.     RTS
  565. ;*-*
  566. ;; Addq/Subq            9
  567. ASM_ASQ:              ; 9
  568.     CMP.W   #$0F00,(A3)+
  569.     BNE iERROR30
  570.  
  571.     MOVEM.L A0/D1,-(A7)
  572.     BSR ASM_GRABVALUE
  573.     TST.L   D0
  574.     BEQ iERROR30
  575.     MOVE.L  D1,D2
  576.     MOVEM.L (A7)+,A0/D1
  577.  
  578.     TST.L   D2
  579.     BEQ iERROR31
  580.     CMP.L   #8,D2
  581.     BNE.S   .1
  582.     MOVEQ   #0,D2
  583. .1: MOVE.L  D2,D3
  584.     AND.L   #$FFFFFFF8,D3
  585.     TST.L   D3
  586.     BNE iERROR31
  587.     AND.W   #%111,D2
  588.     MOVEQ   #9,D3
  589.     LSL.W   D3,D2
  590.     ADD.W   D2,(A1)
  591.     RTS
  592. ;*-*
  593. ;; Bcc                  10
  594. ASM_BCC:              ; 10
  595.     CMP.W   #IDENT,(A3)+
  596.     ADDQ.L  #2,A0
  597.     BNE iERROR4
  598.     MOVE.L  (A3)+,A2
  599.     CMP.B   #LAB,4(A2)
  600.     BNE iERROR4
  601.     BTST    #4,5(A2)        ; CHECK IF METHOD
  602.     BNE iERROR4
  603.  
  604.     CMP.W   #3,D1
  605.     BNE     .X0
  606.     MOVE.W  -2(A0),(A1)     ; Bcc.L....
  607.     MOVEM.L D1/A0,-(A7)
  608.     MOVE.W  10(A2),D0
  609.     BSR     ADDBRANCHPCREL32
  610.     MOVEM.L (A7)+,D1/A0
  611.     RTS
  612.  
  613. .X0:CMP.W   #4,D1
  614.     BEQ.S   .X1
  615.     CMP.W   #1,D1           ; A Bcc.S/Bcc.B ?
  616.     BNE.S   .1
  617. .X1:MOVE.B  #5,1(A1)
  618.     BRA.S   .2
  619. .1: MOVE.W  #0,(A4)+
  620. .2: MOVE.W  10(A2),D0
  621.     MOVEM.L D1/A0,-(A7)
  622.     CLR.W   NEWOP
  623.     BSR ADDBRANCH
  624.     MOVEM.L (A7)+,D1/A0
  625.     RTS
  626.  
  627. ;*-*
  628. ;; DBcc                 11
  629. ASM_DBCC:             ; 11
  630.     BSR ASM_REGID
  631.     CMP.B   #4,(A3)+
  632.     BNE iERROR19
  633.     MOVE.B  (A3)+,D0
  634.     OR.B    D0,1(A1)
  635.     BSR SKIP244
  636.     BSR.W   ASM_COMMA
  637.     CMP.W   #IDENT,(A3)+
  638.     BNE iERROR4
  639.     MOVE.L  (A3)+,A2
  640.     CMP.B   #LAB,4(A2)
  641.     BNE iERROR4
  642.     BTST    #4,5(A2)        ; CHECK IF METHOD
  643.     BNE iERROR4
  644.     MOVE.W  #0,(A4)+
  645.     MOVE.W  10(A2),D0
  646.     MOVEM.L D1/A0,-(A7)
  647.     CLR.W   NEWOP
  648.     BSR ADDBRANCH
  649.     MOVEM.L (A7)+,D1/A0
  650.     RTS
  651. ;*-*
  652. ;; Address reg          12
  653. ASM_GETADRREG:            ; 12
  654.     MOVE.W  (A0)+,D0
  655.     CMP.B   #5,(A3)+
  656.     BNE iERROR19
  657.     MOVE.B  (A3)+,D2
  658.     AND.W   #%111,D2
  659.     LSL.W   D0,D2
  660.     ADD.W   D2,(A1)
  661.     RTS
  662. ;*-*
  663. ;; Shift                13
  664. ASM_SHIFT:            ; 13
  665.     BSR ASM_REGID
  666.     MOVE.B  (A3),D2
  667.     CMP.B   #4,D2
  668.     BEQ.S   .2
  669.     CMP.B   #15,D2
  670.     BNE.W   .1
  671.     ADDQ.L  #2,A3           ; IMM,REG
  672.     CMP.W   #VALUE,(A3)+
  673.     BNE iERROR30
  674.     MOVE.L  (A3)+,D4
  675.     BEQ iERROR31
  676.     CMP.L   #8,D4
  677.     BNE.S   .4
  678.     MOVEQ   #0,D4
  679. .4: CMP.L   #8,D4
  680.     BPL iERROR31
  681.     TST.L   D4
  682.     BMI iERROR31
  683.     BSR ASM_COMMA
  684.     BSR ASM_REGID
  685.     CMP.B   #4,(A3)
  686.     BNE.S   .5
  687.     ADDQ.L  #1,A3
  688.     MOVE.B  (A3)+,D5
  689.     BSR SKIP244
  690.     LSL.W   #1,D4
  691.     OR.B    D4,(A1)
  692.     OR.B    D5,1(A1)
  693.     SUBQ.W  #1,D1
  694.     LSL.W   #6,D1
  695.     OR.W    D1,(A1)
  696.     ADDQ.L  #2,A0
  697.     RTS
  698. .2: BSET    #5,1(A1)        ; REG,REG
  699.     ADDQ.L  #1,A3
  700.     MOVE.B  (A3)+,D3
  701.     LSL.B   #1,D3
  702.     OR.B    D3,(A1)
  703.     BSR SKIP244
  704.     BSR ASM_COMMA
  705.     BSR ASM_REGID
  706.     CMP.B   #4,(A3)+
  707.     BNE iERROR19
  708.     MOVE.B  (A3)+,D3
  709.     BSR SKIP244
  710.     OR.B    D3,1(A1)
  711.     SUBQ.W  #1,D1
  712.     LSL.W   #6,D1
  713.     OR.W    D1,(A1)
  714.     ADDQ.L  #2,A0
  715.     RTS
  716. .5: CMP.W   #1,D4
  717.     BNE iERROR31
  718. .1: CMP.W   #2,D1           ; SHIFT IN MEM NEEDS .W
  719.     BNE iERROR31
  720.     BSR.W   ASM_GETEA
  721.     MOVE.W  #MDEST,D2       ; SHIFT IN MEMORY
  722.     BTST    D0,D2
  723.     BEQ iERROR19
  724.     MOVE.W  (A0)+,(A1)      ; NEW OPCODE
  725.     OR.W    D3,(A1)         ; PUT IN EA
  726.     RTS
  727. ;*-*
  728. ;; Data reg             14
  729. ASM_DATAREG:          ; 14
  730.     MOVE.W  (A0)+,D0
  731.     BSR ASM_REGID
  732.     CMP.B   #4,(A3)+
  733.     BNE iERROR19
  734.     MOVEQ   #0,D2
  735.     MOVE.B  (A3)+,D2
  736.     LSL.W   D0,D2
  737.     ADD.W   D2,(A1)
  738.     BSR SKIP244
  739.     RTS
  740. ;*-*
  741. ;; Bit                  15
  742. ASM_BIT:              ; 15
  743.     CMP.B   #$F,(A3)
  744.     BNE.S   .1
  745.     ADDQ.L  #2,A3           ; #IMM,EA
  746.     CMP.W   #VALUE,(A3)+
  747.     BNE iERROR30
  748.     MOVE.L  (A3)+,D2
  749.     CHKB    D2,D3,iERROR31
  750.     MOVE.W  D2,(A4)+
  751.     MOVE.W  (A0)+,(A1)      ; NEW OPCODE
  752.     BSR ASM_COMMA
  753.     BSR.W   ASM_GETEA
  754.     MOVE.W  #BTDEST,D2
  755.     BTST    D0,D2
  756.     BEQ iERROR19
  757.     OR.W    D3,(A1)
  758.     RTS
  759. .1: BSR ASM_REGID
  760.     CMP.B   #4,(A3)+        ; Dx,EA
  761.     BNE iERROR19
  762.     MOVE.B  (A3)+,D2
  763.     LSL.B   #1,D2
  764.     OR.B    D2,(A1)
  765.     BSR SKIP244
  766.     BSR ASM_COMMA
  767.     BSR.W   ASM_GETEA
  768.     MOVE.W  #BTDEST,D2
  769.     BTST    D0,D2
  770.     BEQ iERROR19
  771.     OR.W    D3,(A1)
  772.     ADDQ.L  #2,A0
  773.     RTS
  774. ;*-*
  775. ;; SizeA                16
  776. ASM_SIZEA:            ; 16
  777.     TST.W   D1
  778.     bNE     .EXISTS
  779.     MOVE.W  (A0),D1
  780. .EXISTS:
  781.     ADDQ.L  #2,A0
  782.     MOVE.L  D1,D0
  783.     SUBQ.L  #1,D0
  784.     MOVE.W  (A0)+,D2
  785.     BTST    D0,D2
  786.     BEQ     iERROR79
  787.  
  788.     CMP.W   #1,D1
  789.     BEQ iERROR79
  790.     CMP.W   #3,D1
  791.     BEQ.S   .1
  792.     RTS
  793. .1: BSET    #0,(A1)
  794.     RTS
  795. ;*-*
  796. ;; SizeE                17
  797. ASM_SIZEE:            ; 17
  798.     TST.W   D1
  799.     bNE     .EXISTS
  800.     MOVE.W  (A0),D1
  801. .EXISTS:
  802.     ADDQ.L  #2,A0
  803.     MOVE.L  D1,D0
  804.     SUBQ.L  #1,D0
  805.     MOVE.W  (A0)+,D2
  806.     BTST    D0,D2
  807.     BEQ     iERROR79
  808.  
  809.     CMP.W   #1,D1
  810.     BEQ iERROR79
  811.     CMP.W   #3,D1
  812.     BEQ.S   .1
  813.     RTS
  814. .1: BSET    #6,1(A1)
  815.     RTS
  816. ;*-*
  817. ;; Xreg                 18
  818. ASM_XREG:             ; 18
  819.     BSR ASM_REGID
  820.     MOVE.B  (A3)+,D2
  821.     MOVE.B  (A3)+,D3
  822.     BSR SKIP244
  823.     BSR ASM_COMMA
  824.     BSR ASM_REGID
  825.     MOVE.B  (A3)+,D4
  826.     MOVE.B  (A3)+,D5
  827.     BSR SKIP244
  828.     CMP.B   D2,D4
  829.     BNE iERROR19
  830.     CMP.B   #4,D2
  831.     BEQ.S   .1
  832.     CMP.B   #8,D2
  833.     BNE iERROR19
  834.     BSET    #3,1(A1)
  835. .1: AND.B   #%111,D3
  836.     AND.B   #%111,D5
  837.     OR.B    D3,1(A1)
  838.     LSL.B   #1,D5
  839.     OR.B    D5,(A1)
  840.     RTS
  841. ;*-*
  842. ;; Exg                  19
  843. ASM_DOEXG:            ; 19
  844.     BSR ASM_REGID
  845.     MOVE.B  (A3)+,D2
  846.     MOVE.B  (A3)+,D3
  847.     CMP.B   #4,D2
  848.     BNE.S   .1
  849.     BSR SKIP244
  850.  
  851.     LSL.B   #1,D3
  852.     OR.B    D3,(A1)
  853.  
  854.     BSR ASM_COMMA
  855.     BSR ASM_REGID
  856.     MOVE.B  (A3)+,D2
  857.     MOVE.B  (A3)+,D3
  858.     AND.B   #%111,D3
  859.  
  860.     OR.B    D3,1(A1)
  861.  
  862.     CMP.B   #4,D2
  863.     BNE.S   .2
  864.     BSR SKIP244
  865.     BSET    #6,1(A1)        ; d,d
  866.     RTS
  867. .2: BSET    #7,1(A1)        ; d,a
  868.     BSET    #3,1(A1)
  869.     RTS
  870. .1: CMP.B   #5,D2
  871.     BNE iERROR19
  872.     AND.B   #%111,D3
  873.  
  874.     OR.B    D3,1(A1)
  875.  
  876.     BSR ASM_COMMA
  877.     BSR ASM_REGID
  878.     MOVE.B  (A3)+,D2
  879.     MOVE.B  (A3)+,D3
  880.     AND.B   #%111,D3
  881.  
  882.     LSL.B   #1,D3
  883.     OR.B    D3,(A1)
  884.  
  885.     CMP.B   #4,D2
  886.     BNE.S   .3
  887.     BSR SKIP244
  888.     BSET    #7,1(A1)        ; d,a
  889.     BSET    #3,1(A1)
  890.     RTS
  891. .3: BSET    #6,1(A1)        ; a,a
  892.     BSET    #3,1(A1)
  893.     RTS
  894. ;*-*
  895. ;; Cmpm                 20
  896. ASM_CMPM:             ; 20
  897.     CMP.B   #7,(A3)+
  898.     BNE iERROR19
  899.     MOVE.B  (A3)+,D2
  900.     BSR ASM_COMMA
  901.     CMP.B   #7,(A3)+
  902.     BNE iERROR19
  903.     AND.W   #$7,D2
  904.     OR.W    D2,(A1)
  905.     MOVE.B  (A3)+,D2
  906.     AND.W   #$7,D2
  907.     LSL.B   #1,D2
  908.     OR.B    D2,(A1)
  909.     RTS
  910. ;*-*
  911. ;; Movem                21
  912. ASM_MOVEM:            ; 21
  913.     BSR ASM_REGID
  914.     MOVE.B  (A3),D0
  915.     BEQ.S   .1B
  916.     CMPI.B  #6,D0
  917.     BMI.S   .1
  918. .1B:    ADDQ.L  #2,A4
  919.     BSR.W   ASM_GETEA       ; (Ax)+,REGLIST
  920.     MOVE.W  #MMSRC,D2
  921.     BTST    D0,D2
  922.     BEQ iERROR19
  923.     OR.W    D3,(A1)
  924.     BSET    #2,(A1)
  925.     BSR ASM_COMMA
  926.     BSR ASM_REGID
  927.     BSR.S   .2
  928.     MOVE.W  D2,2(A1)
  929.     RTS
  930. .1: BSR.S   .2
  931.     MOVE.W  D2,(A4)+
  932.     MOVE.W  D7,-(A7)
  933.     BSR ASM_COMMA
  934.     BSR.W   ASM_GETEA       ; REGLIST,-(Ax)
  935.     MOVE.W  (A7)+,D7
  936.     CMP.W   #4,D0
  937.     BNE.S   .10
  938.     MOVE.W  D7,2(A1)
  939. .10:    MOVE.W  #MMDEST,D2
  940.     BTST    D0,D2
  941.     BEQ iERROR19
  942.     OR.W    D3,(A1)
  943.     RTS
  944. .2: MOVEQ   #0,D2           ; MASK
  945.     MOVEQ   #0,D7
  946.     MOVE.B  (A3)+,D0        ; GET REGLIST
  947.     BEQ iERROR0
  948. .6: MOVEQ   #4,D6
  949.     CMP.B   #4,D0
  950.     BEQ.S   .4
  951.     CMP.B   #5,D0
  952.     BEQ.S   .5
  953.     BRA iERROR19
  954. .X: SUBQ.L  #2,A3
  955.     RTS
  956. .4: MOVEQ   #0,D4
  957.     MOVE.B  (A3)+,D4        ; Dx
  958.     BSR SKIP244
  959.     BSET    D4,D2
  960.     MOVEQ   #15,D3
  961.     SUB.L   D4,D3
  962.     BSET    D3,D7
  963. .9: MOVE.W  (A3)+,D5
  964.     CMP.W   #10,D5
  965.     BEQ.S   .7
  966.     CMP.W   #8,D5
  967.     BNE.S   .X
  968.     BSR ASM_REGID
  969.     CMP.B   (A3)+,D6
  970.     BNE iERROR19
  971.     MOVEQ   #0,D5
  972.     MOVE.B  (A3)+,D5
  973.     BSR SKIP244
  974. .8: ADDQ.L  #1,D4
  975.     BSET    D4,D2
  976.     MOVEQ   #15,D3
  977.     SUB.L   D4,D3
  978.     BSET    D3,D7
  979.     CMP.L   D5,D4
  980.     BMI.S   .8
  981.     BEQ.S   .9
  982.     BRA iERROR19
  983. .5: MOVEQ   #5,D6           ; Ax
  984.     BRA.S   .4
  985. .7: BSR ASM_REGID
  986.     MOVE.B  (A3)+,D0
  987.     BRA.S   .6
  988. ;*-*
  989. ;; Trap                 22
  990. ASM_TRAP:             ; 22
  991.     CMP.L   #$0F000001,(A3)+
  992.     BNE iERROR19
  993.     MOVE.L  (A3)+,D2
  994.     MOVE.L  D2,D3
  995.     AND.L   #$FFFFFFF0,D3
  996.     TST.L   D3
  997.     BNE iERROR31
  998.     OR.W    D2,(A1)
  999.     RTS
  1000. ;*-*
  1001. ;; Movep                23
  1002. ASM_MOVEP:            ; 23
  1003.     CMP.B   #4,(A3)
  1004.     BNE.S   .1
  1005.     ADDQ.L  #1,A3
  1006.     BSET    #7,1(A1)        ; Dx,x(Ax)
  1007.     MOVE.B  (A3)+,D2
  1008.     LSL.B   #1,D2
  1009.     OR.B    D2,(A1)
  1010.     BSR ASM_COMMA
  1011.     BSR     ASM_GETEA
  1012.     CMP.W   #5,D0
  1013.     BNE iERROR19
  1014.     AND.W   #7,D3
  1015.     OR.W    D3,(A1)
  1016.     RTS
  1017. .1: BSR     ASM_GETEA       ; x(Ax),Dx
  1018.     CMP.W   #5,D0
  1019.     BNE iERROR19
  1020.     AND.W   #7,D3
  1021.     OR.W    D3,(A1)
  1022.     BSR ASM_COMMA
  1023.     CMP.B   #4,(A3)+
  1024.     BNE iERROR19
  1025.     MOVE.B  (A3)+,D2
  1026.     LSL.B   #1,D2
  1027.     OR.B    D2,(A1)
  1028.     RTS
  1029. ;*-*
  1030. ;; Cmpi                 24
  1031. ASM_CMPI:             ; 24
  1032.     CMP.W   #$0F00,(A3)
  1033.     BEQ .1
  1034.     RTS
  1035. .1: MOVE.B  #$C,(A1)        ; SET TO CMPI
  1036.     BSR     ASM_GETEA
  1037.     CMP.W   #11,D0
  1038.     BNE iERROR19
  1039.     BSR ASM_COMMA
  1040.     BSR ASM_GETEA
  1041.     MOVE.W  #DEST,D2
  1042.     BTST    D0,D2
  1043.     BEQ iERROR19
  1044.     OR.W    D3,(A1)
  1045.     BSR ASM_STOP
  1046.     RTS
  1047. ;*-*
  1048. ;; CpuSup               25
  1049. ASM_CPUSUP:           ; 25
  1050.     MOVE.W  ASMCPU(PC),D0
  1051.     AND.W   (A0)+,D0
  1052.     BEQ iERROR53
  1053.     RTS
  1054. ;*-*
  1055. ;; SizeFixed            26
  1056. ASM_SIZEFIXED:
  1057.     CMP.W   (A0)+,D1
  1058.     BNE iERROR31
  1059.     RTS
  1060. ;*-*
  1061. ;; Size0                27
  1062. ASM_SIZE0:
  1063.     TST.W   D1
  1064.     BNE     iERROR79
  1065.     RTS
  1066. ;*-*
  1067. ;; SizeO                28
  1068. ASM_SIZEO:
  1069.     TST.W   D1
  1070.     BNE     .EXISTS
  1071.     MOVE.W  (A0),D1
  1072. .EXISTS:
  1073.     ADDQ.L  #2,A0
  1074.     MOVe.W  (A0)+,D2
  1075.     MOVE.L  D1,D0
  1076.     SUBQ.L  #1,D0
  1077.     BTST    D0,D2
  1078.     BEQ     iERROR79
  1079.     RTS
  1080. ;*-*
  1081. ;; Monadic              29
  1082. ASM_MONADIC:
  1083.     MOVE.W  (A0)+,(A4)+
  1084.     CMP.W   #47,(A3)
  1085.     BNE     .EA
  1086.     CMP.W   #5,D1
  1087.     BNE     iERROR79
  1088.     BSR     ASM_GETFPREG
  1089.     MOVE.W  D2,D3
  1090.     CMP.W   #COM,(A3)
  1091.     BNE     .FP
  1092.     BSR     ASM_COMMA
  1093.     BSR     ASM_GETFPREG
  1094. .FP:LSL.W   #8,D3
  1095.     LSL.W   #2,D3
  1096.     LSL.W   #7,D2
  1097.     OR.W    D2,2(A1)
  1098.     OR.W    D3,2(A1)
  1099.     RTS
  1100. .EA:
  1101.     BSR     ASM_GETEA
  1102.     MOVE.L  #NASRC,D2
  1103.     BTST    D0,D2
  1104.     BEQ     iERROR19
  1105.     TST.W   D0
  1106.     BNE     .EA2
  1107.     CMp.W   #5,D1
  1108.     BPL     iERROR79
  1109. .EA2:
  1110.     TST.W   (A0)+
  1111.     BNE     .EA3
  1112.     CMP.W   #6,D1
  1113.     BEQ     iERROR79
  1114. .EA3:
  1115.     OR.W    D3,(A1)
  1116.     MOVE.L  D1,D2
  1117.     CMp.W   #8,D1
  1118.     BEQ     iERROR79
  1119.     LSL.W   #1,D2
  1120.     MOVE.W  .SIZES(PC,D2),D2
  1121.     OR.W    D2,2(A1)
  1122.     BSR     ASM_COMMA
  1123.     BSR     ASM_GETFPREG
  1124.     LSL.W   #7,D2
  1125.     OR.W    D2,2(A1)
  1126.     RTS
  1127. .SIZES:
  1128.     DC.W    0,$5800,$5000,$4000,$4400,$4800,$4c00,$5400,$0000
  1129. ;*-*
  1130. ;; FpuSup               30
  1131. ASM_FPUSUP:
  1132.     MOVE.W  (A0)+,D2
  1133.     MOVE.W  EFPU,D0
  1134.     AND.W   D0,D2
  1135.     BEQ     iERROR53
  1136.     RTS
  1137. ;*-*
  1138. ;; 040/060 emulated     31
  1139. ASM_46EMUL:
  1140.     CMP.W   #2,EFPU
  1141.     BNE     .X
  1142.     BSET    #7,WARNINGS+3
  1143. .X: RTS
  1144. ;*-*
  1145. ;; Dyadic               32
  1146. ASM_DYADIC:
  1147.     MOVE.W  (A0)+,(A4)+
  1148.     CMP.W   #47,(A3)
  1149.     BNE     .EA
  1150.     CMP.W   #5,D1
  1151.     BNE     iERROR79
  1152.     BSR     ASM_GETFPREG
  1153.     MOVE.W  D2,D3
  1154.     BSR     ASM_COMMA
  1155.     BSR     ASM_GETFPREG
  1156. .FP:LSL.W   #8,D3
  1157.     LSL.W   #2,D3
  1158.     LSL.W   #7,D2
  1159.     OR.W    D2,2(A1)
  1160.     OR.W    D3,2(A1)
  1161.     RTS
  1162. .EA:
  1163.     BSR     ASM_GETEA
  1164.     MOVE.L  #NASRC,D2
  1165.     BTST    D0,D2
  1166.     BEQ     iERROR19
  1167.     TST.W   D0
  1168.     BNE     .EA2
  1169.     CMp.W   #5,D1
  1170.     BPL     iERROR79
  1171. .EA2:
  1172.     TST.W   (A0)+
  1173.     BNE     .EA3
  1174.     CMP.W   #6,D1
  1175.     BEQ     iERROR79
  1176. .EA3:
  1177.     OR.W    D3,(A1)
  1178.     MOVE.L  D1,D2
  1179.     CMp.W   #8,D1
  1180.     BEQ     iERROR79
  1181.     LSL.W   #1,D2
  1182.     MOVE.W  .SIZES(PC,D2),D2
  1183.     OR.W    D2,2(A1)
  1184.     BSR     ASM_COMMA
  1185.     BSR     ASM_GETFPREG
  1186.     LSL.W   #7,D2
  1187.     OR.W    D2,2(A1)
  1188.     RTS
  1189. .SIZES:
  1190.     DC.W    0,$5800,$5000,$4000,$4400,$4800,$4c00,$5400,$0000
  1191. ;*-*
  1192. ;; MmuSup               33
  1193. ASM_MMUSUP:
  1194.     MOVE.W  (A0)+,D2
  1195.     MOVE.W  EMMU,D0
  1196.     AND.W   D0,D2
  1197.     BEQ     iERROR53
  1198.     RTS
  1199. ;*-*
  1200. ;; Copy                 34
  1201. ASM_COPY:
  1202.     MOVE.W  (A0)+,(A4)+
  1203.     RTS
  1204. ;*-*
  1205. ;; Fmove                35
  1206. ASM_FMOVE:
  1207.     CMP.W   #47,(A3)
  1208.     BNE     .EA
  1209.     CMP.W   #$24,2(A3)
  1210.     BPL     .FPCR1
  1211.     BSR     ASM_GETFPREG
  1212.     MOVE.W  D2,D7
  1213.     BSR     ASM_COMMA
  1214.     CMP.W   #47,(A3)
  1215.     BNE     .EAX
  1216.     CMP.W   #5,D1
  1217.  
  1218.     BNE     iERROR79         ; FP to FP
  1219.     BSR     ASM_GETFPREG
  1220.     LSL.W   #8,D7
  1221.     LSL.W   #2,D7
  1222.     LSL.W   #7,D2
  1223.     OR.W    D2,2(A1)
  1224.     OR.W    D7,2(A1)
  1225.     RTS
  1226. .EAX:
  1227.     BSR     ASM_GETEA
  1228.     MOVE.L  #DEST,D2
  1229.     BTST    D0,D2
  1230.     BEQ     iERROR19
  1231.     TST.W   D0
  1232.     BNE     .EAX1
  1233.     CMP.W   #5,D1
  1234.     BPL     iERROR79
  1235. .EAX1:
  1236.     OR.W    D3,(A1)
  1237.     LSL.W   #7,D7
  1238.     OR.W    D7,2(A1)
  1239.     BSR     .ADJUSTSIZE
  1240.     OR.W    #$2000,2(A1)
  1241.     CMP.W   #6,D1
  1242.     BNE     .X
  1243.     CMP.W   #23,(a3)
  1244.     BEQ     .EXT
  1245. .X: RTS
  1246. .EXT:
  1247.     ADDQ.L  #2,A3
  1248.     CMP.B   #4,(A3)
  1249.     BEQ     .EXTD
  1250.     CMp.L   #$0f000001,(a3)+
  1251.     bne     iERROR19
  1252.     move.l  (a3)+,d2
  1253.     bmi     iERROR31
  1254.     cmp.l   #64,d2
  1255.     bpl     iERROR31
  1256.     OR.W    D2,2(A1)
  1257.     CMP.W   #24,(A3)+
  1258.     BNE     iERROR29
  1259.     RTS
  1260. .EXTD:
  1261.     OR.W    #$1000,2(A1)
  1262.     MOve.W  (a3)+,d2
  1263.     and.l   #7,d2
  1264.     lsl.w   #4,d2
  1265.     or.w    d2,2(A1)
  1266.     cmp.w   #24,(a3)+
  1267.     bne     iERROR29
  1268.     RTS
  1269. .FPCR1:
  1270.     CMP.W   #3,D1
  1271.     BNE     iERROR79
  1272.     ADDq.L  #2,A3
  1273.     MOVE.W  (A3)+,D2
  1274.     cmp.w   #$27,d2
  1275.     bpl     iERROR80
  1276.     sub.w   #$24,d2
  1277.     beq     .F11
  1278.     cmp.w   #1,d2
  1279.     beq     .F12
  1280.     move.w  #$A400,D2
  1281.     BRA     .F13
  1282. .F11:
  1283.     move.w  #$a800,d2
  1284.     bra     .F13
  1285. .F12:
  1286.     MOVe.W  #$B000,d2
  1287. .F13:
  1288.     move.w  d2,2(a1)
  1289.     bsr     ASM_COMMA
  1290.     BSR     ASM_GETEA
  1291.     MOVe.W  #DEST,D2
  1292.     BTST    D0,D2
  1293.     BEQ     iERROR19
  1294.     OR.W    D3,(A1)
  1295.     RTS
  1296.  
  1297. .EA:
  1298.     BSR     ASM_GETEA
  1299.     MOVE.L  #NASRC,D2
  1300.     BTST    D0,D2
  1301.     BEQ     iERROR19
  1302.     TST.W   D0
  1303.     BNE     .EA2
  1304.     CMp.W   #5,D1
  1305.     BPL     iERROR79
  1306. .EA2:
  1307.     OR.W    D3,(A1)
  1308.     BSR     ASM_COMMA
  1309.     CMP.W   #$24,2(A3)
  1310.     BPL     .FPCR2
  1311.     BSR     ASM_GETFPREG
  1312.     LSL.W   #7,D2
  1313.     OR.W    D2,2(A1)
  1314.     BSR     .ADJUSTSIZE
  1315.     RTS
  1316.  
  1317. .FPCR2:
  1318.     CMP.W   #3,D1
  1319.     BNE     iERROR79
  1320.     CMP.W   #47,(a3)+
  1321.     BNE     iERROR80
  1322.     MOVE.W  (A3)+,D2
  1323.     cmp.w   #$27,d2
  1324.     bpl     iERROR80
  1325.     sub.w   #$24,d2
  1326.     beq     .F21
  1327.     cmp.w   #1,d2
  1328.     beq     .F22
  1329.     move.w  #$8400,D2
  1330.     BRA     .F23
  1331. .F21:
  1332.     move.w  #$8800,d2
  1333.     bra     .F23
  1334. .F22:
  1335.     MOVe.W  #$9000,d2
  1336. .F23:
  1337.     move.w  d2,2(a1)
  1338.     OR.W    D3,(A1)
  1339.     RTS
  1340. .ADJUSTSIZE:
  1341.     MOVE.L  D1,D2
  1342.     LSL.W   #1,D2
  1343.     MOVE.W  .SIZES(PC,D2),D2
  1344.     OR.W    D2,2(A1)
  1345.     RTS
  1346. .SIZES:
  1347.     DC.W    0,$5800,$5000,$4000,$4400,$4800,$4c00,$5400,$0000
  1348. ;*-*
  1349. ;; Fmovecr              36
  1350. ASM_FMOVECR:
  1351.     CMP.L   #$0f000001,(a3)+
  1352.     BNE     iERROR30
  1353.     MOVE.L  (a3)+,D2
  1354.     BMI     iERROR31
  1355.     CMP.L   #$7F,D2
  1356.     BGT     iERROR31
  1357.     OR.W    D2,2(A1)
  1358.     BSR     ASM_COMMA
  1359.     BSR     ASM_GETFPREG
  1360.     LSL.W   #7,D2
  1361.     OR.W    D2,2(A1)
  1362.     RTS
  1363. ;*-*
  1364. ;; Fmovem               37
  1365. ASM_FMOVEM:
  1366.     CMP.W   #3,D1       ; ".L"?
  1367.     BEQ     .FPCR_LIST
  1368.  
  1369.     CMP.W   #47,(A3)
  1370.     BEQ     .01         ; FP reg list
  1371.  
  1372.     BSR     ASM_GETEA
  1373.     MOVE.L  #MMSRC+1,D2
  1374.     BTST    D0,D2
  1375.     BEQ     iERROR19
  1376.     TST.W   D0
  1377.     BEQ     .02         ; mask in Dx
  1378.  
  1379.     OR.W    D3,(A1)
  1380.     BSR     ASM_COMMA
  1381.     CMP.W   #47,(A3)
  1382.     BEQ     .03         ; restore list
  1383. ;; FMOVEM <ea>,Dx
  1384.     Bsr     ASM_GETEA
  1385.     TST.W   D0
  1386.     BNE     iERROR19
  1387.     LSL.W   #3,D3
  1388.     or.w    d3,2(a1)
  1389.     OR.W    #$C800,2(A1)    ; FMOVEM.X  <ea>,Dx
  1390.     RTS
  1391. ;*-*
  1392. ;; FMOVEM <ea>,<list>
  1393. .03:
  1394.     BSR     .COMBINE_LIST
  1395.     MOVE.L  D0,D7
  1396.     BSR     .FLIP
  1397.     OR.W    D2,2(A1)
  1398.     OR.W    #$D000,2(A1)    ; FMOVEM.X  <ea>,<list>
  1399.     RTS
  1400. ;*-*
  1401. ;; FMOVEM Dx,<ea>
  1402. .02:
  1403.     LSL.W   #3,D3
  1404.     OR.W    D3,2(A1)
  1405.     BSR     ASM_COMMA
  1406.     BSR     ASM_GETEA
  1407.     MOVE.L  #MMDEST,D2
  1408.     BTST    D0,D2
  1409.     BEQ     iERROR19
  1410.     OR.W    D3,(A1)
  1411.     CMP.W   #4,d0
  1412.     bne     .X2
  1413.     OR.W    #$E800,2(A1)    ; FMOVEM.X  Dx,<ea>
  1414.     RTS
  1415. .X2:OR.W    #$F800,2(A1)
  1416.     RTS
  1417. ;*-*
  1418. ;; FMOVEM <list>,<ea>
  1419. .01:
  1420.     BSR     .COMBINE_LIST
  1421.     MOVE.L  D2,D7
  1422.     BSR     ASM_COMMA
  1423.     BSR     ASM_GETEA
  1424.     MOVE.L  #MMDEST,D2
  1425.     BTST    D0,D2
  1426.     BEQ     iERROR19
  1427.     OR.W    D3,(A1)
  1428.     CMP.W   #4,D0
  1429.     BNE     .X1
  1430.     OR.W    #$E000,2(A1)    ; FMOVEM.X <list>,<ea>
  1431.     OR.W    D7,2(a1)
  1432.     RTS
  1433. .X1:OR.W    #$F000,2(A1)
  1434.     BSR     .FLIP
  1435.     OR.W    D2,2(A1)
  1436.     RTS
  1437. ;*-*
  1438. ;; Flip bits
  1439. .FLIP:
  1440.     MOVEQ   #7,D0
  1441.     MOVEQ   #0,D2
  1442. .FLIPX:
  1443.     LSR.W   #1,D7
  1444.     BCC     .FLIPY
  1445.     BSET    D0,D2
  1446. .FLIPY:
  1447.     DBF     D0,.FLIPX
  1448.     RTS
  1449. ;*-*
  1450. ;; Combine mask list
  1451. .COMBINE_LIST:
  1452.     MOVEQ   #0,D0
  1453.     BSR     ASM_GETFPREG
  1454.     BSET    D2,D0           ; D0 - mask
  1455.     MOVE.L  D2,D7
  1456. .LOOP:
  1457.     CMP.W   #10,(A3)
  1458.     BEQ     .ONE
  1459.     CMP.W   #8,(A3)
  1460.     BNE     .XXX
  1461.  
  1462.     ADDQ.L  #2,A3
  1463.     ADDQ.L  #1,D7
  1464.     BSR     ASM_GETFPREG
  1465.     CMP.W   D2,D7
  1466.     BGT     iERROR19
  1467. .L1:
  1468.     BTST    D7,D0
  1469.     BNE     iERROR50
  1470.     BSET    D7,D0
  1471.     ADDQ.B  #1,D7
  1472.     CMP.W   D2,D7
  1473.     BLE     .L1
  1474.     CMP.W   #8,(A3)
  1475.     BEQ     iERROR19
  1476.     CMP.W   #10,(A3)
  1477.     BNE     .XXX
  1478.  
  1479. .ONE:
  1480.     ADDQ.L  #2,A3
  1481.     BSR     ASM_GETFPREG
  1482.     BTST    D2,D0
  1483.     BNE     iERROR50
  1484.     BSET    D2,D0
  1485.     MOVE.L  D2,D7
  1486.     BRA     .LOOP
  1487. .XXX:
  1488.     MOVE.L  D0,D2
  1489.     RTS
  1490. ;*-*
  1491. ;; FPcr
  1492. .FPCR_LIST:
  1493.     BSR     .COMBINE_FPCR
  1494.     OR.W    D2,2(A1)
  1495.     OR.W    #$A000,2(A1)
  1496.     BSR     ASM_COMMA
  1497.     BSR     ASM_GETEA
  1498.     MOVE.W  #MMDEST,D2
  1499.     bTST    D0,D2
  1500.     bEQ     iERROR19
  1501.     OR.W    D3,(A1)
  1502.     RTS
  1503. .CREA:
  1504.     BSR     ASM_GETEA
  1505.     MOVE.W  #MMSRC,D2
  1506.     BTST    D0,D2
  1507.     BEQ     iERROR19
  1508.     OR.W    D3,(A1)
  1509.     BSR     ASM_COMMA
  1510.     BSR     .COMBINE_FPCR
  1511.     OR.W    d2,2(A1)
  1512.     OR.W    #$C000,2(A1)
  1513.     RTS
  1514. ;*-*
  1515. ;; Combine FPcr
  1516. .COMBINE_FPCR:
  1517.     CMP.W   #47,(A3)+
  1518.     BNE     iERROR80
  1519.     MOVEQ   #0,D2
  1520. .CFLOOP:
  1521.     MOVE.W  (A3)+,D0
  1522.     SUB.L   #$24,D0
  1523.     BMI     iERROR80
  1524.     CMp.W   #1,D0
  1525.     BMI     .x1
  1526.     BEQ     .x2
  1527.     BTST    #10,d2
  1528.     bne     iERROR50
  1529.     bset    #10,d2
  1530.     bra     .x3
  1531. .x2:
  1532.     btst    #12,d2
  1533.     bne     iERROR50
  1534.     bset    #12,d2
  1535.     bra     .x3
  1536. .x1:
  1537.     btst    #11,d2
  1538.     bne     iERROR50
  1539.     bset    #11,d2
  1540. .x3:
  1541.     cmp.l   #$000a002f,(a3)+
  1542.     beq     .CFLOOP
  1543.     subq.l  #4,a3
  1544.     rts
  1545. ;*-*
  1546. ;*-*
  1547. ;; Fsincos              38
  1548. ASM_FSINCOS:
  1549.     CMP.W   #47,(A3)
  1550.     BNE     .EA
  1551.     CMP.W   #5,D1
  1552.     BNE     iERROR79
  1553.     BSR     ASM_GETFPREG
  1554.     LSL.W   #8,D2
  1555.     LSL.W   #2,D2
  1556.     OR.W    D2,2(A1)
  1557.     BRA     .REST
  1558. .EA:
  1559.     BSR     .ADJUSTSIZE
  1560.     BSR     ASM_GETEA
  1561.     MOVE.L  #NASRC,D2
  1562.     BTST    D0,D2
  1563.     BEQ     iERROR19
  1564.     TST.W   D0
  1565.     BNE     .SKP
  1566.     CMP.W   #5,D1
  1567.     BPL     iERROR79
  1568. .SKP:
  1569.     OR.W    D3,(A1)
  1570. .REST:
  1571.     BSR     ASM_COMMA
  1572.     BSR     ASM_GETFPREG
  1573.     MOVE.L  D2,D7
  1574.     CMP.W   #19,(A3)+
  1575.     BNE     iERROR81
  1576.     BSR     ASM_GETFPREG
  1577.     LSL.W   #7,D2
  1578.     OR.W    D2,2(A1)
  1579.     OR.W    D7,2(A1)
  1580.     RTS
  1581.  
  1582. .ADJUSTSIZE:
  1583.     MOVE.L  D1,D2
  1584.     LSL.W   #1,D2
  1585.     MOVE.W  .SIZES(PC,D2),D2
  1586.     OR.W    D2,2(A1)
  1587.     RTS
  1588. .SIZES:
  1589.     DC.W    0,$5800,$5000,$4000,$4400,$4800,$4c00,$5400,$0000
  1590. ;*-*
  1591. ;; Trapcc               39
  1592. ASM_TRAPCC:
  1593.     CMP.L   #$0F000001,(A3)
  1594.     BEQ     .PARAM
  1595.     ADD.W   #2,(A1)
  1596.     RTS
  1597. .PARAM:
  1598.     ADDQ.L  #4,A3
  1599.     MOVE.L  (A3)+,D2
  1600.     CMP.W   #2,D1
  1601.     BEQ     .WRD
  1602.     ADD.W   #1,(A1)
  1603.     MOVE.L  D2,(A4)+
  1604.     RTS
  1605. .WRD:
  1606.     CHKW    D2,D7,iERROR31
  1607.     MOVE.W  D2,(A4)+
  1608.     RTS
  1609. ;*-*
  1610. ;; Ftst                 40
  1611. ASM_FTST:
  1612.     CMP.W   #47,(A3)
  1613.     BNE     .EA
  1614.     CMP.W   #5,D1
  1615.     BNE     iERROR79
  1616.     BSR     ASM_GETFPREG
  1617.     lsl.w   #8,d2
  1618.     lsl.w   #2,d2
  1619.     or.w    d2,2(a1)
  1620.     rts
  1621. .EA:
  1622.     BSR     ASM_GETEA
  1623.     MOVE.L  #NASRC,D2
  1624.     BTST    D0,D2
  1625.     BEQ     iERROR19
  1626.     OR.W    d3,(a1)
  1627.     TST.W   D0
  1628.     BNE     .SKP
  1629.     CMP.W   #5,D1
  1630.     BPl     iERROR79
  1631. .SKP:
  1632.     BSR     .ADJUSTSIZE
  1633.     RTS
  1634.  
  1635. .ADJUSTSIZE:
  1636.     MOVE.L  D1,D2
  1637.     LSL.W   #1,D2
  1638.     MOVE.W  .SIZES(PC,D2),D2
  1639.     OR.W    D2,2(A1)
  1640.     RTS
  1641. .SIZES:
  1642.     DC.W    0,$5800,$5000,$4000,$4400,$4800,$4c00,$5400,$0000
  1643. ;*-*
  1644. ;; Standard MMU         41
  1645. ASM_PMMSTD:
  1646.     CMP.W   #47,(A3)
  1647.     BNE     .EA
  1648.     ADDQ.L  #2,A3
  1649.     MOVE.W  (a3)+,D2
  1650.     CMP.W   #2,D2
  1651.     BPL     iERROR82
  1652.     OR.W    D2,2(A1)
  1653.     BRA     .C
  1654. .EA:
  1655.     BSR     ASM_GETEA
  1656.     TST.W   D0
  1657.     BNE     .040
  1658.     OR.W    #8,D3
  1659.     OR.W    D3,2(A1)
  1660. .C:
  1661.     BSR     ASM_COMMA
  1662.     CMP.L   #$0f000001,(a3)+
  1663.     BNE     iERROR30
  1664.     MOVE.L  (A3)+,D2
  1665.     BMI     iERROR31
  1666.     CMP.L   #8,D2
  1667.     BPL     iERROR31
  1668.     LSL.W   #5,D2
  1669.     OR.W    D2,2(A1)
  1670.     MOVE.W  #0,(A0)
  1671.     CMP.W   #COM,(A3)
  1672.     BEQ     .C2
  1673.     RTS
  1674. .C2:
  1675.     BSR     ASM_COMMA
  1676.     BSR     ASM_GETEA
  1677.     MOVE.L  #%000111100100,D2
  1678.     BTST    D0,D2
  1679.     BEQ     iERROR19
  1680.     OR.W    d3,(a1)
  1681.     or.w    #$800,2(a1)
  1682.     rts
  1683. .040:
  1684.     TST.W   (A0)
  1685.     BEQ     iERROR19
  1686.     CMP.W   #2,ECPU
  1687.     BLT     iERROR53
  1688.     ADDQ.L  #2,A0
  1689.     CMP.W   #2,D0
  1690.     BNE     iERROR19
  1691.     MOVE.W  #$F508,(A1)
  1692.     AND.W   #7,D3
  1693.     OR.W    #8,D3
  1694.     OR.W    D3,(A1)
  1695.     LEA     2(A1),A4
  1696.     RTS
  1697.  
  1698. ;*-*
  1699. ;; MMU Load             42
  1700. ASM_PMMLDX:
  1701.     CMP.W   #47,(A3)
  1702.     BNE     .EA
  1703.     ADDQ.L  #2,A3
  1704.     MOVE.W  (a3)+,D2
  1705.     CMP.W   #2,D2
  1706.     BPL     iERROR82
  1707.     OR.W    D2,2(A1)
  1708.     BRA     .C
  1709. .EA:
  1710.     BSR     ASM_GETEA
  1711.     TST.W   D0
  1712.     BNE     iERROR19
  1713.     OR.W    #8,D3
  1714.     OR.W    D3,2(A1)
  1715. .C:
  1716.     BSR     ASM_COMMA
  1717.     BSR     ASM_GETEA
  1718.     MOVE.L  #%000111100100,D2
  1719.     BTST    D0,D2
  1720.     BEQ     iERROR19
  1721.     OR.W    d3,(a1)
  1722.     rts
  1723. ;*-*
  1724. ;; MMU Test             43
  1725. ASM_PMMTST:
  1726.     CMP.W   #47,(A3)
  1727.     BNE     .EA
  1728.     ADDQ.L  #2,A3
  1729.     MOVE.W  (a3)+,D2
  1730.     CMP.W   #2,D2
  1731.     BPL     iERROR82
  1732.     OR.W    D2,2(A1)
  1733.     BRA     .C
  1734. .EA:
  1735.     BSR     ASM_GETEA
  1736.     TST.W   D0
  1737.     BNE     .040
  1738.     OR.W    #8,D3
  1739.     OR.W    D3,2(A1)
  1740. .C:
  1741.     BSR     ASM_COMMA
  1742.     BSR     ASM_GETEA
  1743.     MOVE.L  #%000111100100,D2
  1744.     BTST    D0,D2
  1745.     BEQ     iERROR19
  1746.     OR.W    d3,(a1)
  1747.     BSR     ASM_COMMA
  1748.     CMP.L   #$0f000001,(a3)+
  1749.     BNE     iERROR30
  1750.     MOVE.L  (A3)+,D2
  1751.     BMI     iERROR31
  1752.     CMP.L   #8,D2
  1753.     BPL     iERROR31
  1754.     LSL.W   #8,D2
  1755.     LSL.W   #2,D2
  1756.     OR.W    D2,2(A1)
  1757.     MOVE.W  #0,(A0)
  1758.     CMP.W   #COM,(A3)
  1759.     BEQ     .C2
  1760.     RTS
  1761. .C2:
  1762.     BSR     ASM_COMMA
  1763.     BSR     ASM_GETEA
  1764.     CMP.W   #1,D0
  1765.     BNE     iERROR19
  1766.     OR.W    #$100,2(a1)
  1767.     AND.L   #$7,D3
  1768.     LSL.W   #5,D3
  1769.     OR.W    D3,2(a1)
  1770.     RTS
  1771. .040:
  1772.     CMP.W   #2,D0
  1773.     BNE     iERROR19
  1774.     CMP.W   #2,ECPU
  1775.     BMI     iERROR53
  1776.     ADDQ.L  #2,A0
  1777.     MOVE.W  (A0)+,(A1)
  1778.     AND.L   #7,D3
  1779.     OR.W    D3,(A1)
  1780.     LEA     2(A1),A4
  1781.     RTS
  1782. ;*-*
  1783. ;; MMU Move             44
  1784. ASM_PMMMOVE:
  1785.     CMP.W   #47,(A3)
  1786.     BEQ     .II
  1787.     BSR     .EA
  1788.     BSR     ASM_COMMA
  1789.     BSR     .SEL
  1790.     RTS
  1791. .II:BSR     .SEL
  1792.     BSR     ASM_COMMA
  1793.     BSR     .EA
  1794.     RTS
  1795.  
  1796. .EA:
  1797.     BSR     ASM_GETEA
  1798.     MOVE.L  #%000111111100,D2
  1799.     BTST    D0,D2
  1800.     BEQ     iERROR19
  1801.     OR.W    D3,(A1)
  1802.     RTS
  1803.  
  1804. .SEL:
  1805.     CMP.W   #47,(a3)+
  1806.     BNE     iERROR82
  1807.     MOVE.W  (A3)+,D2
  1808.     CMP.W   #3,D1
  1809.     BEQ     .LO
  1810.     CMP.W   #8,D1
  1811.     BEQ     .QO
  1812.     CMP.W   #2,D1
  1813.     BEQ     .WO
  1814.     BRA     iERROR79
  1815. ;; Long ones
  1816. .LO:CMP.W   #3,D2
  1817.     BNE     .L0
  1818.     MOVE.W  #$4200,D2
  1819.     BRA     .LZ
  1820. .L0:CMP.W   #$13,D2
  1821.     BNE     .L1
  1822.     MOVE.W  #$A00,D2
  1823.     BRA     .LZ
  1824. .L1:CMP.W   #$14,D2
  1825.     BNE     .L2
  1826.     MOVe.W  #$E00,D2
  1827.     BRA     .LZ
  1828. .L2:BRA     iERROR82
  1829.  
  1830. .LZ:OR.W    D2,2(A1)
  1831.     RTS
  1832. ;*-*
  1833. ;; Quad ones
  1834. .QO:CMP.W   #$10,D2
  1835.     BNE     .Q0
  1836.     MOVE.W  #$4A00,D2
  1837.     BRA     .QZ
  1838. .Q0:CMP.W   #$1b,D2
  1839.     BNE     .Q1
  1840.     MOVE.W  #$4600,D2
  1841.     BRA     .QZ
  1842. .Q1:CMP.W   #$12,D2
  1843.     BNE     .Q2
  1844.     MOVE.W  #$4e00,D2
  1845.     BRA     .QZ
  1846. .Q2:BRA     iERROR82
  1847.  
  1848. .QZ:OR.W    D2,2(A1)
  1849.     RTS
  1850. ;*-*
  1851. ;; Word ones
  1852. .WO:CMP.W   #$E,D2      ;MMUSR
  1853.     BNE     .W0
  1854.     MOVE.W  #$6200,D2
  1855.     BRA     .WZ
  1856. .W0:CMP.W   #$16,D2     ;BAC0
  1857.     BNE     .W1
  1858.     MOVE.W  #$7600,D2
  1859.     BRA     .WZ
  1860. .W1:CMP.W   #$30,D2     ;BAC1
  1861.     BNE     .W2
  1862.     MOVE.W  #$7604,D2
  1863.     BRA     .WZ
  1864. .W2:CMP.W   #$31,D2     ;BAC2
  1865.     BNE     .W3
  1866.     MOVE.W  #$7608,D2
  1867.     BRA     .WZ
  1868. .W3:CMP.W   #$32,D2     ;BAC3
  1869.     BNE     .W4
  1870.     MOVE.W  #$760c,D2
  1871.     BRA     .WZ
  1872. .W4:CMP.W   #$33,D2     ;BAC4
  1873.     BNE     .W5
  1874.     MOVE.W  #$7610,D2
  1875.     BRA     .WZ
  1876. .W5:CMP.W   #$34,D2     ;BAC5
  1877.     BNE     .W6
  1878.     MOVE.W  #$7614,D2
  1879.     BRA     .WZ
  1880. .W6:CMP.W   #$35,D2     ;BAC6
  1881.     BNE     .W7
  1882.     MOVE.W  #$7618,D2
  1883.     BRA     .WZ
  1884. .W7:CMP.W   #$36,D2     ;BAC7
  1885.     BNE     .W8
  1886.     MOVE.W  #$761C,D2
  1887.     BRA     .WZ
  1888. .W8:CMP.W   #$15,D2     ;BAD0
  1889.     BNE     .W9
  1890.     MOVE.W  #$7200,D2
  1891.     BRA     .WZ
  1892. .W9:CMP.W   #$29,D2     ;BAD1
  1893.     BNE     .WA
  1894.     MOVE.W  #$7204,D2
  1895.     BRA     .WZ
  1896. .WA:CMP.W   #$2a,D2     ;BAD2
  1897.     BNE     .WB
  1898.     MOVE.W  #$7208,D2
  1899.     BRA     .WZ
  1900. .WB:CMP.W   #$2b,D2     ;BAD3
  1901.     BNE     .WC
  1902.     MOVE.W  #$720c,D2
  1903.     BRA     .WZ
  1904. .WC:CMP.W   #$2c,D2     ;BAD4
  1905.     BNE     .WD
  1906.     MOVE.W  #$7210,D2
  1907.     BRA     .WZ
  1908. .WD:CMP.W   #$2d,D2     ;BAD5
  1909.     BNE     .WE
  1910.     MOVE.W  #$7214,D2
  1911.     BRA     .WZ
  1912. .WE:CMP.W   #$2e,D2     ;BAD6
  1913.     BNE     .WF
  1914.     MOVE.W  #$7218,D2
  1915.     BRA     .WZ
  1916. .WF:CMP.W   #$2f,D2     ;BAD7
  1917.     BNE     .WG
  1918.     MOVE.W  #$721C,D2
  1919.     BRA     .WZ
  1920. .WG:BRA     iERROR82
  1921. .WZ:OR.W    D2,2(A1)
  1922.     RTS
  1923. ;*-*
  1924. ;*-*
  1925. ;; MMU EA               45
  1926. ASM_PMMEA:
  1927.     BSR     ASM_GETEA
  1928.     MOVE.W  (A0)+,D2
  1929.     BTST    D0,D2
  1930.     BEQ     iERROR19
  1931.     AND.L   #7,D3
  1932.     OR.W    D3,(A1)
  1933.     RTS
  1934. ;*-*
  1935. ;; Immediate 3 bit      46
  1936. ASM_IMM3B:
  1937.     CMp.L   #$0f000001,(a3)+
  1938.     BNE     iERROR30
  1939.     MOVE.L  (a3)+,D2
  1940.     BMI     iERROR31
  1941.     CMP.L   #8,D2
  1942.     BPL     iERROR31
  1943.     OR.W    D2,(A1)
  1944.     RTS
  1945. ;*-*
  1946. ;; Movec                47
  1947. ASM_MOVEC:
  1948.     CMP.W   #47,(A3)
  1949.     BNE     .EA_TO_CR
  1950.     BSR     .COMBINE_REG
  1951.     BSR     ASM_COMMA
  1952.     BSR     .COMBINE_EA
  1953.     RTS
  1954. .EA_TO_CR:
  1955.     BSR     .COMBINE_EA
  1956.     BSR     ASM_COMMA
  1957.     BSR     .COMBINE_REG
  1958.     ADD.W   #1,(A1)
  1959.     RTS
  1960. .COMBINE_REG:
  1961.     CMP.W   #47,(A3)+
  1962.     BNE     iERROR83
  1963.     MOVE.W  (A3)+,D2
  1964.     CMP.W   #$12,D2
  1965.     BPL     iERROR83
  1966.     LSL.W   #1,D2
  1967.     MOVE.W  .REGS(PC,D2),D2
  1968.     OR.W    D2,2(A1)
  1969.     RTS
  1970. .REGS:
  1971.     DC.W    $0000,$0001,$0002,$0003,$0004,$0005,$0006,$0007,$0008
  1972.     DC.W    $0800,$0801,$0802,$0803,$0804,$0805,$0806,$0807,$0808
  1973. .COMBINE_EA:
  1974.     BSR     ASM_GETEA
  1975.     MOVE.L  #3,D2
  1976.     BTST    D0,D2
  1977.     BEQ     iERROR19
  1978.     LSL.W   #8,D3
  1979.     LSL.W   #4,D3
  1980.     OR.W    D3,2(A1)
  1981.     RTS
  1982. ;*-*
  1983. ;; Moves                48
  1984. ASM_MOVES:
  1985.     MOVEQ   #0,D2
  1986.     CMP.W   #1,D1
  1987.     BEQ     .SX
  1988.     ADD.W   #$40,D2
  1989.     CMP.W   #2,D1
  1990.     BEQ     .SX
  1991.     ADD.W   #$40,D2
  1992. .SX:
  1993.     ADD.W   D2,(A1)
  1994.     BSR     ASM_GETEA
  1995.     MOVE.L  #%000011111111,D2
  1996.     BTST    D0,D2
  1997.     BEQ     iERROR19
  1998.     CMP.W   #2,D0
  1999.     BMI     .SPACE
  2000.     OR.W    D3,(A1)
  2001.     BSR     ASM_COMMA
  2002.     BSR     ASM_GETEA
  2003.     CMP.W   #2,D0
  2004.     BPL     iERROR19
  2005.     LSL.W   #8,D3
  2006.     LSL.W   #4,D3
  2007.     OR.W    D3,2(A1)
  2008.     RTS
  2009. .SPACE:
  2010.     LSL.W   #8,D3
  2011.     LSL.W   #4,D3
  2012.     OR.W    #$800,D3
  2013.     OR.W    D3,2(A1)
  2014.     BSR     ASM_COMMA
  2015.     BSR     ASM_GETEA
  2016.     MOVE.L  #%000011111100,D2
  2017.     BTST    D0,D2
  2018.     BEQ     iERROR19
  2019.     OR.W    D3,(A1)
  2020.     RTS
  2021. ;*-*
  2022. ;; BitField1            49
  2023. ASM_BITFIELD1:
  2024.     BSR     ASM_GETEA
  2025.     MOVE.L  #DEST,D2
  2026.     BTST    D0,D2
  2027.     BEQ     iERROR19
  2028.     OR.W    D3,(A1)
  2029.     BSR     ASM_COMMA
  2030.     CMP.W   #23,(A3)+
  2031.     BNE     iERROR19
  2032.     BSR     .GET
  2033.     MOVE.L  D2,D7
  2034.     CMP.W   #19,(A3)+
  2035.     BNE     iERROR81
  2036.     BSR     .GET
  2037.     LSL.W   #6,D7
  2038.     OR.W    D7,2(A1)
  2039.     OR.W    D2,2(A1)
  2040.     CMP.W   #24,(A3)+
  2041.     BNE     iERROR29
  2042.     RTS
  2043. .GET:
  2044.     CMP.W   #$0001,(A3)
  2045.     BNE     .EA
  2046.     ADDQ.L  #2,A3
  2047.     MOVE.L  (A3)+,D2
  2048.     BMI     iERROR31
  2049.     CMP.L   #32,D2
  2050.     BPL     iERROR31
  2051.     RTS
  2052. .EA:
  2053.     BSR     ASM_GETEA
  2054.     TST.W   D0
  2055.     BNE     iERROR19
  2056.     MOVE.L  D3,D2
  2057.     OR.W    #$20,D2
  2058.     RTS
  2059. ;*-*
  2060. ;; BitField2            50
  2061. ASM_BITFIELD2:
  2062.     BSR     ASM_GETEA
  2063.     MOVE.L  #DEST,D2
  2064.     BTST    D0,D2
  2065.     BEQ     iERROR19
  2066.     OR.W    D3,(A1)
  2067.     BSR     ASM_COMMA
  2068.     CMP.W   #23,(A3)+
  2069.     BNE     iERROR19
  2070.     BSR     .GET
  2071.     MOVE.L  D2,D7
  2072.     CMP.W   #19,(A3)+
  2073.     BNE     iERROR81
  2074.     BSR     .GET
  2075.     LSL.W   #6,D7
  2076.     OR.W    D7,2(A1)
  2077.     OR.W    D2,2(A1)
  2078.     CMP.W   #24,(A3)+
  2079.     BNE     iERROR29
  2080.     BSR     ASM_COMMA
  2081.     BSR     ASM_GETEA
  2082.     TST.W   D0
  2083.     BNE     iERROR19
  2084.     LSL.W   #8,D3
  2085.     LSL.W   #4,D3
  2086.     OR.W    D3,2(A1)
  2087.     RTS
  2088. .GET:
  2089.     CMP.W   #$0001,(A3)
  2090.     BNE     .EA
  2091.     ADDQ.L  #2,A3
  2092.     MOVE.L  (A3)+,D2
  2093.     BMI     iERROR31
  2094.     CMP.L   #32,D2
  2095.     BPL     iERROR31
  2096.     RTS
  2097. .EA:
  2098.     BSR     ASM_GETEA
  2099.     TST.W   D0
  2100.     BNE     iERROR19
  2101.     MOVE.L  D3,D2
  2102.     OR.W    #$20,D2
  2103.     RTS
  2104. ;*-*
  2105. ;; BitField3            51
  2106. ASM_BITFIELD3:
  2107.     BSR     ASM_GETEA
  2108.     TST.W   D0
  2109.     BNE     iERROR19
  2110.     LSL.W   #8,D3
  2111.     LSL.W   #4,D3
  2112.     OR.W    D3,2(A1)
  2113.  
  2114.     BSR     ASM_COMMA
  2115.  
  2116.     BSR     ASM_GETEA
  2117.     MOVE.L  #DEST,D2
  2118.     BTST    D0,D2
  2119.     BEQ     iERROR19
  2120.     OR.W    D3,(A1)
  2121.     BSR     ASM_COMMA
  2122.     CMP.W   #23,(A3)+
  2123.     BNE     iERROR19
  2124.     BSR     .GET
  2125.     MOVE.L  D2,D7
  2126.     CMP.W   #19,(A3)+
  2127.     BNE     iERROR81
  2128.     BSR     .GET
  2129.     LSL.W   #6,D7
  2130.     OR.W    D7,2(A1)
  2131.     OR.W    D2,2(A1)
  2132.     CMP.W   #24,(A3)+
  2133.     BNE     iERROR29
  2134.     RTS
  2135. .GET:
  2136.     CMP.W   #$0001,(A3)
  2137.     BNE     .EA
  2138.     ADDQ.L  #2,A3
  2139.     MOVE.L  (A3)+,D2
  2140.     BMI     iERROR31
  2141.     CMP.L   #32,D2
  2142.     BPL     iERROR31
  2143.     RTS
  2144. .EA:
  2145.     BSR     ASM_GETEA
  2146.     TST.W   D0
  2147.     BNE     iERROR19
  2148.     MOVE.L  D3,D2
  2149.     OR.W    #$20,D2
  2150.     RTS
  2151. ;*-*
  2152. ;; Mul/Div              52
  2153. ASM_MULDIV:
  2154.     CMP.W   #2,D1
  2155.     BEQ     .WRD
  2156.     MOVE.W  (A0)+,(A1)
  2157.     MOVE.W  (A0)+,(A4)+
  2158.     MOVE.W  ASMCPU(PC),D2
  2159.     AND.L   #$FE,D2
  2160.     BEQ     iERROR53
  2161.     BSR     ASM_GETEA
  2162.     MOVE.L  #NASRC,D2
  2163.     BTST    D0,D2
  2164.     BEQ     iERROR19
  2165.     OR.W    D3,(A1)
  2166.     BSR     ASM_COMMA
  2167.     BSR     ASM_GETEA
  2168.     TST.W   D0
  2169.     BNE     iERROR19
  2170.     MOVE.W  D3,D7
  2171.     CMP.W   #19,(A3)
  2172.     BNE     .X1
  2173.     ADDQ.L  #2,A3
  2174.     BSR     ASM_GETEA
  2175.     TST.W   D0
  2176.     BNE     iERROR19
  2177. .X1:LSL.W   #8,D3
  2178.     LSL.W   #4,D3
  2179.     OR.W    D3,2(A1)
  2180.     OR.W    D7,2(A1)
  2181.     RTS
  2182. .WRD:
  2183.     ADDQ.L  #4,A0
  2184.     BSR     ASM_GETEA
  2185.     MOVE.L  #NASRC,D2
  2186.     BTST    D0,D2
  2187.     BEQ     iERROR19
  2188.     OR.W    D3,(A1)
  2189.     BSR     ASM_COMMA
  2190.     BSR     ASM_GETEA
  2191.     TST.W   D0
  2192.     BNE     iERROR19
  2193.     LSL.W   #8,D3
  2194.     LSL.W   #1,D3
  2195.     OR.W    D3,(A1)
  2196.     RTS
  2197. ;*-*
  2198. ;; Link                 53
  2199. ASM_LINK:
  2200.     CMP.W   #3,D1
  2201.     BEQ     .LONG
  2202.     BSR     ASM_GETEA
  2203.     CMP.W   #1,D0
  2204.     BNE     iERROR19
  2205.     AND.L   #7,D3
  2206.     OR.W    D3,(A1)
  2207.     BSR     ASM_COMMA
  2208.     CMP.L   #$0F000001,(A3)+
  2209.     BNE     iERROR30
  2210.     MOVE.L  (A3)+,D0
  2211.     CHKW    D0,D2,iERROR31
  2212.     MOVE.W  D0,(A4)+
  2213.     RTS
  2214. .LONG:
  2215.     MOVE.W  ASMCPU,D2
  2216.     AND.L   #%111110,D2
  2217.     BEQ     iERROR53
  2218.     MOVE.W  #$4800,(A1)
  2219.     BSR     ASM_GETEA
  2220.     CMP.W   #1,D0
  2221.     BNE     iERROR19
  2222.     OR.W    D3,(A1)
  2223.     BSR     ASM_COMMA
  2224.     CMP.L   #$0F000001,(A3)+
  2225.     BNE     iERROR30
  2226.     MOVE.L  (A3)+,(A4)+
  2227.     RTS
  2228. ;*-*
  2229. ;; CpCache 040+         54
  2230. ASM_CPCACHE040:
  2231.     CMP.W   #47,(A3)+
  2232.     BNE     iERROR84
  2233.     MOVEQ   #0,D2
  2234.     MOVE.W  (A3)+,D2
  2235.     SUB.L   #$37,D2
  2236.     BMI     iERROR84
  2237.     CMP.W   #4,D2
  2238.     BPL     iERROR84
  2239.     LSL.W   #6,D2
  2240.     ADD.W    D2,(A1)
  2241.     TST.W   (A0)+
  2242.     BEQ     .XX
  2243.     BSR     ASM_COMMA
  2244.     BSR     ASM_GETEA
  2245.     CMP.W   #2,D0
  2246.     BNE     iERROR19
  2247.     AND.L   #7,D3
  2248.     OR.W    D3,(A1)
  2249. .XX:RTS
  2250. ;*-*
  2251. ;; Move16               55
  2252. ASM_MOVE16:
  2253.     BSR     ASM_GETEA
  2254.     CMP.W   #8,D0
  2255.     BEQ     .ABS
  2256.     CMP.W   #3,D0
  2257.     BEQ     .INC
  2258.     CMP.W   #2,D0
  2259.     BNE     iERROR19
  2260.     AND.L   #7,d3
  2261.     OR.W    D3,(A1)
  2262.     BSR     ASM_COMMA
  2263.     BSR     ASM_GETEA
  2264.     CMP.W   #8,D0
  2265.     BNE     iERROR19
  2266.     RTS
  2267. .ABS:
  2268.     SUB.W   #8,(A1)
  2269.     BSR     ASM_COMMA
  2270.     BSR     ASM_GETEA
  2271.     CMP.W   #3,D0
  2272.     BEQ     .SKIP
  2273.     ADD.W   #16,(A1)
  2274. .SKIP:
  2275.     AND.L   #7,D3
  2276.     OR.W    D3,(A1)
  2277.     RTS
  2278. .INC:
  2279.     SUB.W   #$10,(A1)
  2280.     AND.L   #7,D3
  2281.     OR.W    D3,(A1)
  2282.     BSR     ASM_COMMA
  2283.     BSR     ASM_GETEA
  2284.     CMP.W   #8,D0
  2285.     BNE     .REL2
  2286.     RTS
  2287. .REL2:
  2288.     cmp.w   #3,d0
  2289.     bne     iERROR19
  2290.     add.w   #$20,(A1)
  2291.     lsl.w   #8,d3
  2292.     lsl.w   #4,d3
  2293.     move.w  d3,(a4)+
  2294.     rts
  2295. ;*-*
  2296. ;; Pulse                56
  2297. ASM_PULSE:
  2298.     CMP.L   #$0F000001,(A3)+
  2299.     BNE     iERROR30
  2300.     MOVE.L  (A3)+,D2
  2301.     CHKW    D2,D0,iERROR31
  2302.     MOVE.W  D2,(A4)+
  2303.     RTS
  2304. ;*-*
  2305. ;; Move                 57
  2306. ASM_MOVE:
  2307.     CMP.W   #47,(A3)
  2308.     BEQ     .KW1
  2309.     BSR     ASM_GETEA
  2310.     MOVE.L  #%111111111111,d2
  2311.     btst    d0,d2
  2312.     beq iERROR19     ;should never happen.
  2313.     cmp.w   #1,d0
  2314.     bne .1
  2315.     cmp.w   #1,d1
  2316.     beq iERROR31
  2317. .1:
  2318.     or.w    d3,(a1)
  2319.  
  2320.     bsr ASM_COMMA
  2321.  
  2322.     cmp.w   #47,(a3)
  2323.     beq     .KW2
  2324.     bsr ASM_GETEA
  2325.     move.l  #%000111111111,d2
  2326.     btst    d0,d2
  2327.     beq iERROR19
  2328.     cmp.w   #1,d0
  2329.     bne     .2
  2330.  
  2331.     cmp.w   #1,d1
  2332.     beq iERROR31
  2333.     and.l   #7,d3
  2334.     lsl.w   #8,d3
  2335.     lsl.w   #1,d3
  2336.     or.w    d3,(a1)
  2337.     or.w    #64,(a1)
  2338.     rts
  2339. .2:
  2340.     move.w  d3,d0
  2341.     lsr.w   #3,d3
  2342.     and.w   #%111,d0
  2343.     lsl.w   #3,d0
  2344.     add.w   d3,d0
  2345.     lsl.w   #6,d0
  2346.     or.w    d0,(a1)
  2347.     rts
  2348.  
  2349. .KW1:
  2350.     cmp.w   #2,d1
  2351.     bne iERROR31
  2352.     addq.l  #2,a3
  2353.     move.w  (a3)+,d0
  2354.  
  2355.     cmp.w   #$27,d0
  2356.     bne .KW1_2
  2357.     move.w  #$42c0,(A1)
  2358.     bra .KW1_EXIT
  2359. .KW1_2:
  2360.     cmp.w   #$28,d0
  2361.     bne iERROR19
  2362.     move.w  #$40c0,(a1)
  2363. .KW1_EXIT:
  2364.     bsr ASM_COMMA
  2365.     BSR ASM_GETEA
  2366.     move.l  #%000111111101,d2
  2367.     btst    d0,d2
  2368.     beq iERROR19
  2369.     or.w    d3,(A1)
  2370.     rts
  2371. .KW2:
  2372.  
  2373.     cmp.w   #1,d0
  2374.     beq     iERROR19     ; move A0,xxx
  2375.     addq.l  #2,a3
  2376.     move.w  (a3)+,d0
  2377.     cmp.w   #$27,d0
  2378.     bne     .KW2_2
  2379.     move.w  (a1),d0
  2380.     and.w   #%111111,d0
  2381.     move.w  #$44c0,(a1)
  2382.     or.w    d0,(a1)
  2383.     rts
  2384. .KW2_2:
  2385.     cmp.w   #$28,d0
  2386.     bne iERROR19
  2387.     move.w  (a1),d0
  2388.     and.w   #%111111,d0
  2389.     move.w  #$46c0,(a1)
  2390.     or.w    d0,(a1)
  2391.     rts
  2392. ;*-*
  2393. ;; Andi                 58
  2394. ASM_ANDI:
  2395.     BSR ASM_GETEA
  2396.     CMP.W   #11,d0
  2397.     bne iERROR30
  2398.  
  2399.     bsr ASM_COMMA
  2400.  
  2401.     cmp.w   #47,(a3)
  2402.     beq .KW
  2403.     bsr ASM_GETEA
  2404.     move.l  #%000111111101,d2
  2405.     btst    d0,d2
  2406.     beq iERROR19
  2407.     or.w    d3,(a1)
  2408.     rts
  2409. .KW:
  2410.     cmp.w   #1,d1
  2411.     bne iERROR31
  2412.     addq.l  #2,a3
  2413.     cmp.w   #$27,(a3)+
  2414.     bne iERROR19
  2415.     move.w  #$23c,(a1)
  2416.     rts
  2417. ;*-*
  2418. ;; Eori                 59
  2419. ASM_EORI:
  2420.     BSR ASM_GETEA
  2421.     CMP.W   #11,d0
  2422.     bne iERROR30
  2423.  
  2424.     bsr ASM_COMMA
  2425.  
  2426.     cmp.w   #47,(a3)
  2427.     beq .KW
  2428.     bsr ASM_GETEA
  2429.     move.l  #%000111111101,d2
  2430.     btst    d0,d2
  2431.     beq iERROR19
  2432.     or.w    d3,(a1)
  2433.     rts
  2434. .KW:
  2435.     cmp.w   #1,d1
  2436.     bne iERROR31
  2437.     addq.l  #2,a3
  2438.     cmp.w   #$27,(a3)+
  2439.     bne iERROR19
  2440.     move.w  #$A3c,(a1)
  2441.     rts
  2442. ;*-*
  2443. ;; Ori                  60
  2444. ASM_ORI:
  2445.     BSR ASM_GETEA
  2446.     CMP.W   #11,d0
  2447.     bne iERROR30
  2448.  
  2449.     bsr ASM_COMMA
  2450.  
  2451.     cmp.w   #47,(a3)
  2452.     beq .KW
  2453.     bsr ASM_GETEA
  2454.     move.l  #%000111111101,d2
  2455.     btst    d0,d2
  2456.     beq iERROR19
  2457.     or.w    d3,(a1)
  2458.     rts
  2459. .KW:
  2460.     cmp.w   #1,d1
  2461.     bne iERROR31
  2462.     addq.l  #2,a3
  2463.     cmp.w   #$27,(a3)+
  2464.     bne iERROR19
  2465.     move.w  #$3c,(a1)
  2466.     rts
  2467. ;*-*
  2468.  
  2469. ;; FPU reg
  2470. ASM_GETFPREG:
  2471.     CMP.W   #47,(A3)+
  2472.     BNE     iERROR80
  2473.     MOVE.W  (A3)+,D2
  2474.     SUB.W   #$1c,D2
  2475.     BMI     iERROR80
  2476.     CMP.W   #$8,D2
  2477.     BPL     iERROR80
  2478.     RTS
  2479. ;*-*
  2480. ;; Data reg
  2481. ASM_GETDATAREG:           ; D0=SHIFT
  2482.     BSR ASM_REGID
  2483.     CMP.B   #4,(A3)+
  2484.     BNE iERROR19
  2485.     MOVE.B  (A3)+,D2
  2486.     AND.W   #%111,D2
  2487.     LSL.W   D0,D2
  2488.     ADD.W   D2,(A1)
  2489.     BSR SKIP244
  2490.     RTS
  2491. ;*-*
  2492. ;; Any EA
  2493. ASM_ANYEA:            ; D7=SHIFT, res=d3.ea after shift
  2494.     BSR.W   ASM_GETEA
  2495.     LSL.W   D7,D3
  2496.     ADD.W   D3,(A1)
  2497.     RTS
  2498. ;*-*
  2499. ;; Get EA
  2500. ASM_GETEA:
  2501.     MOVE.W  (A3)+,D0
  2502.     CMP.W   #$400,D0        ; COMPLEX OR BASIC ADR.MODE
  2503.     BMI .2
  2504. ;; Dx/Ax/(Ax)/(PC)/(A0)+/-(A0)
  2505.     SUB.W   #$400,D0        ; LOWBYTE IS ADR.MASK, HI IS #ADR.MODE
  2506.     MOVEQ   #0,D3
  2507.     MOVE.B  D0,D3           ; D3.L = ADR.MODE MASK
  2508.     LSR.W   #8,D0           ; D0.W = # ADR.MODE
  2509.     CMP.W   #11,D0
  2510.     BEQ.S   .1
  2511.     CMP.W   #5,D0
  2512.     BPL iERROR19
  2513.     CMP.W   #1,D0
  2514.     BEQ.S   .AX
  2515. .X: RTS                     ; DELIVERS MASK IN D3 AND # IN D0
  2516. .AX:    CMP.W   #1,D1
  2517.     BEQ iERROR19
  2518.     RTS
  2519. ;*-*
  2520. ;; Immediate
  2521. .1: MOVEM.L D1/A0,-(A7)
  2522.     CMP.W   #LIBC,(A3)
  2523.     BNE .1_1
  2524.     ADDQ.L  #4,A3
  2525.     MOVE.W  (A3)+,D1
  2526.     EXT.L   D1
  2527.     ADDQ.L  #8,A3
  2528.     MOVEQ   #0,D0
  2529.     BRa .1_2
  2530. .1_1:
  2531.     BSR ASM_GRABVALUE
  2532. .1_2:
  2533.     MOVE.L  D1,D4
  2534.     MOVEM.L (A7)+,D1/A0
  2535.     CMP.W   #-1,D0          ; IMMEDIATE VALUE?
  2536.     BEQ iERROR19
  2537.     MOVE.W  #%111100,D3
  2538.     MOVEQ   #11,D0
  2539.     CMP.W   #3,D1
  2540.     BNE.S   .4
  2541.     MOVE.L  D4,(A4)+        ; .L #
  2542.     RTS
  2543. .4: CMP.W   #2,D1
  2544.     BNE.S   .5
  2545.     CHKW    D4,D5,iERROR93
  2546.     MOVE.W  D4,(A4)+        ; .W #
  2547.     RTS
  2548. .5: CHKB    D4,D5,iERROR94
  2549.     MOVE.B  #0,(A4)+        ; .B #
  2550.     MOVE.B  D4,(A4)+
  2551.     RTS
  2552. ;*-*
  2553. .2:
  2554.     CMP.W   #29,(A3)
  2555.     BEQ _020
  2556.     CMP.W   #17,D0
  2557.     BEQ _BRACKET
  2558. ;; Other
  2559.     SUBQ.L  #2,A3           ; ANY OTHER MODE
  2560.     MOVEM.L D1/A0,-(A7)
  2561.     BSR ASM_GRABVALUE
  2562.     MOVE.L  D1,D4           ; D4=VALUE
  2563.     CMP.W   #-1,D0
  2564.     BEQ ASM_GETLABEL
  2565.     MOVEM.L (A7)+,D1/A0
  2566. GL_BACK:
  2567.     MOVE.B  (A3),D2         ; SEE WHAT'S NEXT
  2568.     CMP.B   #4,D2
  2569.     BMI     .6              ; ABS OR INDEXED MODE
  2570.     CMP.W   #$D,d2
  2571.     beq     .xxPC
  2572.     CMP.B   #6,D2           ;
  2573.     BNE iERROR19
  2574.     MOVE.W  (A3)+,D3
  2575.     AND.W   #%111,D3
  2576.     OR.W    #%101000,D3
  2577.     MOVEQ   #5,D0
  2578.     MOVE.W  D4,(A4)+
  2579.     CHKW    D4,D5,iERROR93
  2580.     RTS
  2581. ;; $00(PC)
  2582. .xxPC:
  2583.     addq.l  #2,a3
  2584.     moveq   #0,d3
  2585.     move.w  #%111010,d3
  2586.     moveq   #9,d0
  2587.     move.w  d4,(a4)+
  2588.     CHKW    D4,D5,iERROR31
  2589.     RTS
  2590. ;*-*
  2591. ;; $00(PC,Rn)
  2592. .xxPCxx:
  2593.     addq.l  #2,a3
  2594.     BSR ASM_COMMA
  2595.     cmp.b   #4,(a3)
  2596.     blt     iERROR17
  2597.     cmp.b   #5,(a3)
  2598.     bgt     iERROR17
  2599.     seq d0
  2600.     move.w  (a3)+,d3
  2601.     and.w   #7,d3
  2602.     and.b   #8,d0
  2603.     or.b    d0,d3
  2604.     lsl.w   #4,d3
  2605.     move.b  d3,(a4)+
  2606.     move.b  d4,(a4)+
  2607.     MOVE.L  D4,D5           ; D5=EXTENSIONWORD
  2608.     CHKB    D5,D4,iERROR31
  2609.  
  2610.     moveq   #0,d3
  2611.     move.w  #%111011,d3
  2612.     moveq   #10,d0
  2613.     CHKW    D4,D5,iERROR31
  2614.     cmp.w   #18,(a3)+
  2615.     bne iERROR74
  2616.     RTS
  2617. ;*-*
  2618. .6: MOVE.W  (A3),D2
  2619.     CMP.W   #17,D2
  2620.     BEQ.S   .9
  2621.     CMP.W   #26,D2
  2622.     BEQ.S   .7
  2623.     CMP.W   #27,D2
  2624.     BNE.S   .8
  2625.     ADDQ.L  #2,A3
  2626. .8: MOVE.W  #%111001,D3     ; ABS 4
  2627.     MOVEQ   #8,D0
  2628.     MOVE.L  D4,(A4)+
  2629.     RTS
  2630. .7: ADDQ.L  #2,A3           ; ABS 4.W
  2631.     MOVE.W  #%111000,D3
  2632.     MOVEQ   #7,D0
  2633.     MOVE.W  D4,(A4)+
  2634.     CHKW    D4,D5,iERROR93
  2635.     RTS
  2636.  
  2637. .9: ADDQ.L  #2,A3           ; off(Ax,Rx.s), D4=off
  2638.     CMP.B   #$E,(A3)
  2639.     BEQ .xxPCxx
  2640.     CMP.B   #5,(A3)+
  2641.     BNE iERROR19
  2642.     MOVE.B  (A3)+,D3        ; D3.B = Ax
  2643.     AND.L   #%111,D3        ; (Ax,...
  2644.     OR.W    #%110000,D3
  2645.     MOVEQ   #6,D0
  2646.     MOVE.L  D4,D5           ; D5=EXTENSIONWORD
  2647.     CHKB    D5,D4,iERROR94
  2648.     AND.W   #$FF,D5
  2649.     CMP.W   #COM,(A3)+
  2650.     BNE iERROR5
  2651.     BSR ASM_REGID
  2652.     MOVE.B  (A3)+,D2
  2653.     CMP.B   #4,D2           ; ...,Dx
  2654.     BEQ.S   .12
  2655.     CMP.B   #5,D2
  2656.     BNE iERROR19
  2657.     BSET    #15,D5          ; ...,Ax
  2658. .12:
  2659.     MOVE.B  (A3)+,D2
  2660.     BSR SKIP244
  2661.     AND.W   #%111,D2
  2662.     MOVEQ   #12,D4
  2663.     LSL.W   D4,D2
  2664.     OR.W    D2,D5
  2665.  
  2666.     MOVE.W  (A3)+,D2
  2667.     CMP.W   #26,D2
  2668.     BEQ .12_2
  2669.     CMP.W   #27,D2
  2670.     BNE .13
  2671.     BSET    #11,D5
  2672. .12_2:
  2673.     MOVE.W  (A3)+,D2
  2674. .13:
  2675.     CMp.W   #9,D2
  2676.     BNE .14
  2677.     CMP.W   #VALUE,(A3)+
  2678.     BNE iERROR73
  2679.     MOVE.L  (A3)+,D2
  2680.     MOVEQ   #0,D0
  2681.  
  2682.     CMP.W   #1,D2
  2683.     BEQ .16
  2684.     ADDQ.L  #1,D0
  2685.     CMP.W   #2,D2
  2686.     BEQ .16
  2687.     ADDQ.L  #1,D0
  2688.     CMP.W   #4,D2
  2689.     BEQ .16
  2690.     ADDQ.L  #1,D0
  2691.     CMP.W   #8,D2
  2692.     BNE iERROR91
  2693. .16:
  2694.     LSL.W   #8,D0
  2695.     LSL.W   #1,D0
  2696.     OR.W    D0,D5
  2697.     MOVE.W  (A3)+,D2
  2698. .14:
  2699.     CMP.W   #18,D2
  2700.     BNE iERROR74
  2701.     MOVE.W  D5,(A4)+
  2702.     RTS
  2703. ;*-*
  2704. ;; 020 full
  2705. _020:
  2706.     CMP.W   #1,ECPU
  2707.     BMI iERROR53
  2708.     MOVE.L  A0,-(A7)
  2709.     MOVE.L  A4,A0
  2710.     ADDQ.L  #2,A0
  2711.  
  2712.     MOVE.W  #$30,d3         ; adressing mode for suppressed reg
  2713.     MOVE.W  #6,d0
  2714.     MOVEQ   #0,D6
  2715.     MOVE.l  #%0000000111010000,D2   ; here we set a MOVE.L  (),...
  2716.     ADDQ.L  #6,A3           ; skip "[xx"
  2717.  
  2718.     CMP.W   #30,(A3)
  2719.     BNE     .020_0
  2720.     ADDQ.L  #2,A3
  2721.     BSR     ASM_COMMA
  2722.     BSET    #1,D6
  2723.     BRA     .020_2
  2724.  
  2725. .020_0:
  2726.     CMP.W   #IDENT,(A3)
  2727.     BEQ     .020_ID
  2728.     MOVEM.L D0/D2-D4/D6-A2/A4-a6,-(A7)
  2729.     BSR ASM_GRABVALUE
  2730.     MOVE.L  D0,D5
  2731.     MOVEM.L (A7)+,D0/D2-D4/D6-A2/A4-A6
  2732.     TST.L   D5
  2733.     BMI .020_1
  2734.     CMP.W   #26,(A3)
  2735.     BMI     .020_0_2
  2736.     CMP.W   #28,(A3)
  2737.     BPL     .020_0_2
  2738.     CMP.W   #27,(A3)+
  2739.     BEQ     .020_0_2
  2740.     MOVE.W  D1,(A0)+
  2741.     or.w    #32,d2
  2742.     BCLR    #4,D2
  2743.     BRA     .020_0_1
  2744. .020_0_2:
  2745.     MOVE.L  D1,(A0)+
  2746.     OR.W    #48,D2          ; MOVE.L    ([$xxxxxxxx.L
  2747. .020_0_1:
  2748.     CMP.W   #COM,(A3)+
  2749.     BEQ .020_1
  2750.     CMP.W   #30,-2(A3)
  2751.     bne iERROR0
  2752.     cmp.w   #18,(a3)
  2753.     beq     .020_EXIT
  2754.     BSR ASM_COMMA           ; MOVE.L    ([$xxxxxxxx.L],
  2755.     BSET    #0,D6
  2756.     BRA     .020_1
  2757. .020_ID:
  2758.     ADDQ.L  #2,A3
  2759.     MOVE.L  (A3)+,D1
  2760.     CMP.W   #$E00,2(a3)
  2761.     beq     .020_ID_PCREL
  2762.     cmp.w   #$E00,4(a3)
  2763.     beq     .020_ID_PCREL
  2764.     MOVEM.L D0-D7/A1/A2/A4-A6,-(A7)
  2765.     MOVE.L  D1,A1
  2766.     CMP.B   #LAB,4(A1)
  2767.     BNE     iERROR4
  2768.     MOVE.L  A0,A4
  2769.     MOVE.W  10(A1),D0
  2770.     BSR ADDBRANCHRELOC
  2771.     MOVE.L  A4,A0
  2772.     MOVEM.L (A7)+,D0-D7/A1/A2/A4-a6
  2773.     OR.W    #48,D2
  2774.     BRA .020_0_1
  2775. .020_ID_PCREL:
  2776.     CMP.W   #26,(A3)
  2777.     BMI .020_ID_NOADJ
  2778.     CMP.W   #28,(A3)
  2779.     BPL .020_ID_NOADJ
  2780.     CMP.W   #27,(A3)+
  2781.     BPL .020_ID_NOADJ
  2782.     BCLR    #4,D2
  2783.     OR.W    #32,D2
  2784.     CLR.W   NEWOP
  2785.     MOVEm.L  D0-D7/A1/a2/A4-a6,-(A7)
  2786.     move.l  a0,a4
  2787.     MOVE.L  D1,A1
  2788.     MOve.w  10(a1),d0
  2789.     BSR ADDBRANCHPCREL16E
  2790.     move.l  a4,a0
  2791.     movem.l  (a7)+,d0-d7/a1/a2/a4-a6
  2792.     BRA .020_0_1
  2793. .020_ID_NOADJ:
  2794.     MOVEm.L  D0-D7/A1/a2/A4-a6,-(A7)
  2795.     move.l  a0,a4
  2796.     MOVE.L  D1,A1
  2797.     MOve.w  10(a1),d0
  2798.     BSR ADDBRANCHPCREL32E
  2799.     move.l  a4,a0
  2800.     movem.l  (a7)+,d0-d7/a1/a2/a4-a6
  2801.     OR.W    #48,D2
  2802.     BRA .020_0_1
  2803.  
  2804. .020_1:
  2805.     CMP.w   #$E00,(A3)
  2806.     beq     .020_1_1
  2807.     CMP.B   #5,(A3)
  2808.     BNE     .020_2
  2809.     CMP.W   #9,2(A3)
  2810.     BEQ     .020_2
  2811.     CMP.W   #26,2(A3)
  2812.     BEQ     .020_2
  2813.     CMP.W   #27,2(a3)
  2814.     beq     .020_2
  2815.     BTST    #0,D6
  2816.     bne     .020_2          ; MOVE.L    ([$xxxxxxxx.L]
  2817.     MOVE.W  (A3)+,D1        ; MOVE.L    ([$xxxxxxxx.L,Ax
  2818.     BCLR    #7,D2
  2819.     and.l   #7,d1
  2820.     add.w   d1,d3
  2821.     bra     .020_1_2
  2822. .020_1_1:
  2823.     addq.l  #2,a3
  2824.     addq.l  #8,d3
  2825.     addq.l  #3,d3
  2826.     moveq   #10,d0
  2827.     bclr    #7,d2
  2828. .020_1_2:
  2829.     cmp.w   #COM,(A3)+
  2830.     beq     .020_2
  2831.     cmp.w   #30,-2(a3)
  2832.     bne     iERROR0
  2833.     cmp.w   #18,(a3)
  2834.     beq     .020_EXIT
  2835.     bset    #1,d6
  2836.     bsr ASM_COMMA
  2837. .020_2:
  2838.     CMP.B   #4,(A3)
  2839.     BMI .020_3
  2840.     CMP.B   #6,(A3)
  2841.     BPL .020_3
  2842.  
  2843.     BTST    #1,D6
  2844.     BEQ .020_2_1
  2845.     BSET    #2,D2
  2846. .020_2_1:
  2847.     bclr    #6,d2           ; MOVE.L    ([$xxxxxxxx.L, Ax, Rn
  2848.     MOVE.W  (A3)+,D1        ; or
  2849.     btst    #8,d1           ; MOVE.L    ([$xxxxxxxx.L, Ax], Rn
  2850.     beq .020_2_2
  2851.     bset    #15,d2
  2852. .020_2_2:
  2853.     and.l   #7,d1
  2854.     rol.w   #8,d1
  2855.     rol.w   #4,d1
  2856.     or.w    d1,d2
  2857.     cmp.w   #26,(A3)
  2858.     bmi     .020_2_3
  2859.     cmp.w   #28,(a3)
  2860.     bpl     .020_2_3
  2861.     cmp.w   #27,(a3)+
  2862.     bne     .020_2_3
  2863.     bset    #11,d2
  2864. .020_2_3:
  2865.     cmp.w   #9,(a3)
  2866.     bne     .020_2_5
  2867.     addq.l  #2,a3
  2868.     cmp.w   #VALUE,(a3)+
  2869.     bne     iERROR73
  2870.     move.l  (A3)+,d1
  2871.     moveq   #0,d0
  2872.     cmp.l   #1,d1
  2873.     beq     .020_2_4
  2874.     addq.l  #1,d0
  2875.     cmp.l   #2,d1
  2876.     beq     .020_2_4
  2877.     addq.l  #1,d0
  2878.     cmp.l   #4,d1
  2879.     beq     .020_2_4
  2880.     addq.l  #1,d0
  2881.     cmp.l   #8,d1
  2882.     bne     iERROR91
  2883. .020_2_4:
  2884.     rol.w   #8,d0           ; MOVE.L    ([$xxxxxxxx.L, Ax, Rn.s*y], $yyyyyyyy)
  2885.     rol.w   #1,d0
  2886.     or.w    d0,d2
  2887. .020_2_5:
  2888.     btst    #1,d6
  2889.     bne     .020_2_7
  2890.     cmp.w   #30,(a3)+
  2891.     bne     iERROR34
  2892. .020_2_7:
  2893.     cmp.w   #18,(a3)
  2894.     beq .020_EXIT
  2895.     BSR ASM_COMMA
  2896.  
  2897. .020_3:
  2898.     MOVEM.L D0/D2-D4/D6-A2/A4-a6,-(A7)
  2899.     BSR ASM_GRABVALUE
  2900.     MOVE.L  D0,D5
  2901.     MOVEM.L (A7)+,D0/D2-D4/D6-A2/A4-A6
  2902.     TST.L   D5
  2903.     BMI .020_EXIT
  2904.  
  2905.     CMP.W   #26,(A3)
  2906.     BMI     .020_3_1
  2907.     CMP.W   #28,(A3)
  2908.     BPL     .020_3_1
  2909.     cmp.w   #26,(A3)+
  2910.     BNE     .020_3_1
  2911.     move.w  d1,(a0)+
  2912.     or.w    #2,d2
  2913.     bra     .020_3_2
  2914. .020_3_1:
  2915.     move.l  d1,(a0)+
  2916.     or.w    #3,d2
  2917. .020_3_2:
  2918. .020_EXIT
  2919.     CMP.W   #18,(A3)+
  2920.     BNE iERROR0
  2921.     MOVE.W  D2,(A4)
  2922.     MOVE.L  A0,A4
  2923.     MOVE.L  (A7)+,A0
  2924.     RTS
  2925. ;*-*
  2926. ;; bracketed
  2927. ;; value
  2928. _BRACKET:
  2929.     MOVEQ   #0,D4
  2930.     MOVE.W  (A3),D2
  2931.     CMP.W   #IDENT,D2
  2932.     BEQ .BR_IDENT
  2933.     CMP.W   #LIBC,D2
  2934. ;    BEQ .BR_LIBC
  2935.     CMP.W   #VALUE,D2       ; ($xx,Ax/PC,Rn.S*F)
  2936.     BNE .BR_0
  2937.     ADDQ.L  #2,A3
  2938.     MOVE.L  (A3)+,D4
  2939.     swap    d4
  2940.     tst.w   d4
  2941.     bne iERROR93
  2942.     swap    d4
  2943.  
  2944.     BSR ASM_COMMA
  2945. .BR_0:
  2946.     CMP.B   #$E,(A3)
  2947.     BEQ .BR_1
  2948.     CMP.B   #$5,(A3)
  2949.     BNE iERROR92
  2950.     MOVE.W  (A3)+,D2
  2951.     AND.L   #7,D2
  2952.     moveq   #$28,d3
  2953.     or.w    d2,d3
  2954.     moveq   #5,d0
  2955.     BRA .BR_2
  2956. .BR_1:
  2957.     move.w  (a3)+,d2
  2958.     moveq   #$3a,d3
  2959.     moveq   #9,d0
  2960. .BR_2:
  2961.     CMP.W   #COM,(A3)
  2962.     BNE .BR_EXIT
  2963.     BSR ASM_COMMA
  2964.     CMP.B   #5,(a3)
  2965.     seq D5
  2966.     moveq   #8,d2
  2967.     and.l   d2,d5
  2968.     move.w  (a3)+,d2
  2969.     and.l   #7,d2
  2970.     or.w    d5,d2
  2971.     ror.w   #4,d2
  2972.     ror.l   #8,d4
  2973.     tst.b   D4
  2974.     bne iERROR94
  2975.     rol.l   #8,d4
  2976.     or.w    d2,d4
  2977.     cmp.w   #$3B,D3
  2978.     BEQ .BR_3
  2979.     ADDQ.L  #7,d3
  2980. .BR_3:
  2981.     ADDQ.L  #1,D3
  2982.     addq.l  #1,d0
  2983.     CMP.W   #18,D2
  2984.     BEQ .BR_EXIT
  2985.     move.w  (a3),d2
  2986.     cmp.w   #27,D2
  2987.     bgt .BR_4
  2988.     cmp.w   #26,d2
  2989.     blt .BR_4
  2990.     move.w  (a3)+,d2
  2991.     cmp.w   #26,d2
  2992.     beq .BR_4
  2993.     bset    #11,d4
  2994. .BR_4:
  2995.     cmp.w   #18,(A3)
  2996.     beq .BR_EXIT
  2997.     move.w  (a3)+,d2
  2998.     cmp.w   #9,d2
  2999.     bne iERROR0
  3000.     cmp.w   #VALUE,(a3)+
  3001.     bne iERROR73
  3002.     move.l  (a3)+,d2
  3003.     moveq   #0,d5
  3004.  
  3005.     CMP.W   #1,D2
  3006.     BEQ .BR_5
  3007.     ADDQ.L  #1,D5
  3008.     CMP.W   #2,D2
  3009.     BEQ .BR_5
  3010.     ADDQ.L  #1,D5
  3011.     CMP.W   #4,D2
  3012.     BEQ .BR_5
  3013.     ADDQ.L  #1,D5
  3014.     CMP.W   #8,D2
  3015.     BNE iERROR91
  3016. .BR_5:
  3017.     LSL.W   #8,D5
  3018.     LSL.W   #1,D5
  3019.     OR.W    D5,D4
  3020.  
  3021. .BR_EXIT:
  3022.     cmp.w   #18,(a3)+
  3023.     bne iERROR74
  3024.     move.w  d4,(a4)+
  3025.     rts
  3026. ;*-*
  3027. ;; ident
  3028. .BR_IDENT:
  3029.     addq.l  #2,a3
  3030.     MOVE.L  (A3)+,A5
  3031.     tst.b   4(a5)
  3032.     beq iERROR22
  3033.     cmp.b   #3,4(a5)
  3034.     beq .BRI_LABEL
  3035.     moveq   #$28+5,d3
  3036.     moveq   #5,d0
  3037.     moveq   #0,d4
  3038.     move.w  10(a5),d4
  3039.     cmp.b   #2,4(a5)
  3040.     bne .BRI_1
  3041.     subq.w  #1,d3
  3042. .BRI_1:
  3043.     cmp.w   #COM,(a3)
  3044.     bne .BR_EXIT
  3045.     ADDQ.L  #1,D0
  3046.     addq.l  #8,d3
  3047.     ror.w   #8,d4
  3048.     tst.b   d4
  3049.     beq .BRI_0
  3050.     cmp.b   #$ff,d4
  3051.     bne iERROR94
  3052. .BRI_0:
  3053.     clr.b   d4
  3054.     rol.w   #8,d4
  3055.     bsr ASM_COMMA
  3056.     cmp.b   #5,(a3)
  3057.     seq D2
  3058.     bgt iERROR95
  3059.     cmp.b   #4,(a3)
  3060.     blt iERROR95
  3061.     and.l   #8,d2
  3062.     ror.w   #4,d2
  3063.     or.w    d2,d4
  3064.     move.w  (a3)+,d2
  3065.     and.l   #7,d2
  3066.     ror.w   #4,d2
  3067.     or.w    d2,d4
  3068.     cmp.w   #18,(a3)
  3069.     beq .BR_EXIT
  3070.     cmp.w   #9,(a3)
  3071.     beq .BRI_2
  3072.     cmp.w   #26,(a3)
  3073.     blt iERROR0
  3074.     cmp.w   #27,(a3)
  3075.     bgt iERROR0
  3076.     seq D2
  3077.     rol.l   #8,d2
  3078.     and.l   #$800,d2
  3079.     or.w    d2,d4
  3080.     addq.l  #2,a3
  3081. .BRI_2:
  3082.     cmp.w   #18,(a3)
  3083.     beq .BR_EXIT
  3084.     cmp.w   #9,(a3)+
  3085.     bne iERROR9
  3086.     cmp.w   #VALUE,(a3)+
  3087.     bne iERROR73
  3088.     move.l  (a3)+,d2
  3089.     moveq   #0,d5
  3090.     cmp.w   #1,d2
  3091.     beq .BRI_3
  3092.     addq.l  #1,d5
  3093.     cmp.w   #2,d2
  3094.     beq .BRI_3
  3095.     addq.l  #1,d5
  3096.     cmp.w   #4,d2
  3097.     beq .BRI_3
  3098.     addq.l  #1,d5
  3099.     cmp.w   #8,d2
  3100.     bne iERROR91
  3101. .BRI_3:
  3102.     lsl.l   #8,d5
  3103.     lsl.l   #1,d5
  3104.     or.w    d5,d4
  3105.     bra .BR_EXIT
  3106. ;*-*
  3107. ;; label
  3108. .BRI_LABEL:
  3109.     BSR ASM_COMMA
  3110.     CMP.W   #$E00,(A3)+
  3111.     BNE iERROR92
  3112.  
  3113.     moveq   #$3a,d3
  3114.     moveq   #9,d0
  3115.     moveq   #0,d4
  3116.  
  3117.     cmp.w   #COM,(a3)
  3118.     bne .BRL_EXIT
  3119.     ADDQ.L  #1,D0
  3120.     addq.l  #1,d3
  3121.     bsr ASM_COMMA
  3122.     cmp.b   #5,(a3)
  3123.     seq D2
  3124.     bgt iERROR95
  3125.     cmp.b   #4,(a3)
  3126.     blt iERROR95
  3127.     and.l   #8,d2
  3128.     ror.w   #4,d2
  3129.     or.w    d2,d4
  3130.     move.w  (a3)+,d2
  3131.     and.l   #7,d2
  3132.     ror.w   #4,d2
  3133.     or.w    d2,d4
  3134.     cmp.w   #18,(a3)
  3135.     beq .BRL_EXIT
  3136.     cmp.w   #9,(a3)
  3137.     beq .BRL_2
  3138.     cmp.w   #26,(a3)
  3139.     blt iERROR0
  3140.     cmp.w   #27,(a3)
  3141.     bgt iERROR0
  3142.     seq D2
  3143.     rol.l   #8,d2
  3144.     and.l   #$800,d2
  3145.     or.w    d2,d4
  3146.     addq.l  #2,a3
  3147. .BRL_2:
  3148.     cmp.w   #18,(a3)
  3149.     beq .BRL_EXIT
  3150.     cmp.w   #9,(a3)+
  3151.     bne iERROR9
  3152.     cmp.w   #VALUE,(a3)+
  3153.     bne iERROR73
  3154.     move.l  (a3)+,d2
  3155.     moveq   #0,d5
  3156.     cmp.w   #1,d2
  3157.     beq .BRL_3
  3158.     addq.l  #1,d5
  3159.     cmp.w   #2,d2
  3160.     beq .BRL_3
  3161.     addq.l  #1,d5
  3162.     cmp.w   #4,d2
  3163.     beq .BRL_3
  3164.     addq.l  #1,d5
  3165.     cmp.w   #8,d2
  3166.     bne iERROR91
  3167. .BRL_3:
  3168.     lsl.l   #8,d5
  3169.     lsl.l   #1,d5
  3170.     or.w    d5,d4
  3171. .BRL_EXIT:
  3172.     cmp.w   #18,(a3)+
  3173.     bne iERROR74
  3174.     move.w  d4,(a4)+
  3175.     cmp.w   #10,d0
  3176.     beq .BRL_EXIT2
  3177. .BRL_FINE:
  3178.     movem.l  d0/A0,-(a7)
  3179.     move.w  10(a5),d0
  3180.     clr.w   NEWOP
  3181.     bsr ADDBRANCH
  3182.     movem.l  (a7)+,d0/a0
  3183.     rts
  3184. .BRL_EXIT2:
  3185.     move.b  #1,-1(a4)
  3186.     bra .BRL_FINE
  3187.  
  3188. ;*-*
  3189. ;*-*
  3190. ;*-*
  3191. ;; GetLabel
  3192. ASM_GETLABEL:         ; E INTERFACE TO ASM_GETEA ADR.MODE
  3193.     MOVEM.L (A7)+,D1/A0
  3194.     MOVE.W  (A3)+,D0
  3195.     CMP.W   #IDENT,D0
  3196.     BNE .4
  3197.     MOVE.L  (A3)+,A5        ; A5=VAR
  3198.     MOVE.B  4(A5),D2
  3199.     BEQ iERROR22
  3200.     CMP.B   #LAB,D2
  3201.     BEQ .3
  3202.     BTST    #3,5(A5)        ; SEE IF REGVAR
  3203.     BNE.W   .REG
  3204.     CMP.B   #GLOBV,D2
  3205.     BNE.S   .1
  3206.     MOVEQ   #%101100,D3
  3207.     BRA.S   .2
  3208. .1: MOVEQ   #%101101,D3
  3209. .2: MOVE.W  10(A5),D0
  3210.     MOVE.W  (A3),D2
  3211.     CMP.W   #29,D2
  3212.     BPL.S   .5
  3213.     CMP.W   #26,D2
  3214.     BMI.S   .5
  3215.     ADDQ.L  #2,A3
  3216.     CMP.W   #27,D2
  3217.     BEQ.S   .5
  3218.     CMP.W   #26,D2
  3219.     BNE.S   .6
  3220.     ADDQ.W  #2,D0
  3221.     OPINT
  3222.     BRA.S   .5
  3223. .6: ADDQ.W  #3,D0
  3224.     OPCHAR
  3225. .5: CMP.B   #GLOBV,4(A5)
  3226.     BNE.S   .8
  3227.     GENGI   A5,D2
  3228. .8: OPLONG
  3229.     MOVE.W  D0,(A4)+
  3230.     MOVEQ   #5,D0
  3231.     RTS
  3232.  
  3233. .REG:   MOVEQ   #0,D0
  3234.     MOVE.W  10(A5),D3
  3235.     RTS
  3236.  
  3237. .3: BTST    #4,5(A5)        ; CHECK IF METHOD
  3238.     BNE iERROR4
  3239.     CMP.W   #$D00,(A3)+
  3240.     BNE .9
  3241.     MOVE.W  10(A5),D0       ; LAB(PC)
  3242.     CLR.W   (A4)+
  3243.     MOVEM.L D1/A0,-(A7)
  3244.     CLR.W   NEWOP
  3245.     BSR ADDBRANCH
  3246.     MOVEM.L (A7)+,D1/A0
  3247.     MOVEQ   #9,D0
  3248.     MOVEQ   #%111010,D3
  3249.     RTS
  3250.  
  3251. .9: SUBQ.L  #2,A3           ; lab(PC,Rx.s)
  3252.     CMP.W   #17,(A3)+
  3253.     BNE iERROR19
  3254.     CMP.W   #$E00,(A3)+
  3255.     BNE iERROR19
  3256.     MOVEQ   #%111011,D3     ; (PC,...
  3257.     MOVEQ   #10,D0
  3258.     MOVEQ   #0,D4
  3259.     MOVE.L  D4,D5           ; D5=EXTENSIONWORD
  3260.     MOVEM.L D0-D1/A0,-(A7)
  3261.     MOVE.W  10(A5),D0
  3262.     MOVE.W  #1,(A4)+
  3263.     CLR.W   NEWOP
  3264.     BSR ADDBRANCH
  3265.     MOVEM.L (A7)+,D0-D1/A0
  3266.     MOVE.W  -(A4),D5
  3267.     CMP.W   #COM,(A3)+
  3268.     BNE iERROR5
  3269.     BSR ASM_REGID
  3270.     MOVE.B  (A3)+,D2
  3271.     CMP.B   #4,D2           ; ...,Dx
  3272.     BEQ.S   .12
  3273.     CMP.B   #5,D2
  3274.     BNE iERROR19
  3275.     BSET    #15,D5          ; ...,Ax
  3276. .12:    MOVE.B  (A3)+,D2
  3277.     BSR SKIP244
  3278.     AND.W   #%111,D2
  3279.     MOVEQ   #12,D4
  3280.     LSL.W   D4,D2
  3281.     ADD.W   D2,D5
  3282. .13:    MOVE.W  (A3)+,D2
  3283.     CMP.W   #26,D2
  3284.     BEQ.S   .13
  3285.     CMP.W   #18,D2
  3286.     BEQ .14
  3287.     CMP.W   #27,D2
  3288.     BNE iERROR0
  3289.     BSET    #11,D5
  3290.     BRA.S   .13
  3291. .14:    MOVE.W  D5,(A4)+
  3292.     RTS
  3293. .4: CMP.W   #LIBC,D0        ; LIBCALL(Ax)
  3294.     BNE iERROR19
  3295.     ADDQ.L  #2,A3
  3296.     MOVEQ   #0,D4
  3297.     MOVE.W  (A3)+,D4
  3298.     ADDQ.L  #8,A3
  3299.     EXT.L   D4
  3300.     BRA GL_BACK
  3301.     CMP.B   #6,(A3)+
  3302.     BNE iERROR19
  3303.     MOVE.B  (A3)+,D3
  3304.     AND.W   #%111,D3
  3305.     ADD.W   #%101000,D3
  3306.     MOVEQ   #5,D0
  3307.     RTS
  3308. ;*-*
  3309. ;; GrabValue
  3310.  
  3311. ; EATS INTERIM CODE FOR TRUE VALUES + CALC
  3312. ; -->D0=TRUE/FALSE WAS VALUE
  3313. ; -->D1=RESULT
  3314. ; TRASHES: D0-D4,A0
  3315.  
  3316. ASM_GRABVALUE:
  3317.     MOVEQ   #0,D1
  3318.     MOVEQ   #-1,D0          ; IF D0=-1 THEN NOVALUE ELSE CODENR
  3319. .XL:
  3320.     MOVEQ   #0,D2           ; D2<>0 --> NEGATE
  3321.     MOVE.W  (A3)+,D3
  3322.     CMP.W   #55,D3
  3323.     BEQ     .XL
  3324.     CMP.W   #8,D3           ; '-' SIGN ?
  3325.     BNE.S   .1
  3326.     MOVEQ   #-1,D2
  3327. .xl
  3328.     MOVE.W  (A3)+,D3
  3329.     CMP.W   #55,D3
  3330.     BEQ     .xl
  3331.     CMP.W   #VALUE,D3
  3332.     BNE.S   .X2
  3333.     BRA.S   .2
  3334. .1: CMP.W   #VALUE,D3       ; VALUE ?
  3335.     BNE.S   .X              ; sizeof or exit
  3336. .2: CMP.W   #-1,D0          ; SIZEOFBACK
  3337.     BNE.S   .3
  3338.     MOVEQ   #6,D0           ; ATLEAST ONE VALUE
  3339. .3: TST.L   D2
  3340.     BEQ.S   .4
  3341.     NEG.L   (A3)
  3342. .4: SUBQ.W  #6,D0
  3343.     LSL.W   #2,D0
  3344.     MOVE.L  .T(PC,D0.W),A0
  3345.     JMP (A0)
  3346.  
  3347. .T: DC.L    .MOVE,  .ADD,   .SUB,   .MUL,   .DIV
  3348.     DC.L    .AND,   .OR,    .LSL,   .LSR
  3349.  
  3350. .XB:
  3351.     MOVE.W  (A3)+,D0
  3352.     CMP.W   #11,D0
  3353.     BPL.S   .X3
  3354.     CMP.W   #7,D0
  3355.     BMI.S   .X3         ; SEE IF AND/OR, ELSE QUIT
  3356. .AOB:
  3357.     BRA.S   .XL
  3358. .X2:
  3359.     SUBQ.L  #4,A3
  3360.     CMP.W   #-1,D0
  3361.     BEQ.S   .5
  3362.     SUBQ.L  #2,A3
  3363.     RTS
  3364. .X: CMp.W   #LIBC,D3
  3365.     BEQ .LIB
  3366.     CMP.W   #IOFF+50,D3     ; check for sizeof
  3367.     BNE.S   .XNS
  3368.     CMP.W   #31,(A3)+       ; OBJECT
  3369.     BNE iERROR40
  3370.     MOVE.L  (A3)+,A0        ; WE USE A0=OBJ
  3371.     MOVE.W  4(A0),-(A3)
  3372.     BEQ iERROR40         ; NO SIZEOF IN CONST DECL. (SOB..)
  3373.     CLR.W   -(A3)
  3374.     BRA.S   .2
  3375. .LIB:
  3376.     ADDQ.L  #2,A3
  3377.     MOVE.L  D3,-(A7)
  3378.     MOVE.W  (A3)+,D3
  3379.     ADDQ.L  #4,A3
  3380.     EXT.L   d3
  3381.     MOVE.L  D3,(A3)
  3382.     MOVE.L  (A7)+,D3
  3383.     BRA     .2
  3384.  
  3385. .XNS:
  3386.     SUBQ.L  #2,A3           ; ASSUMES NEXT WORD ALREADY READ
  3387.     CMP.W   #-1,D0
  3388.     BEQ.S   .5
  3389.     SUBQ.L  #2,A3
  3390. .5: RTS
  3391.  
  3392.  
  3393. .X3:
  3394.     CMP.W   #IOFF+29,D0     ; CHECK FOR AND/OR
  3395.     BEQ.S   .AO
  3396.     CMP.W   #IOFF+30,D0
  3397.     BEQ.S   .AO
  3398.     CMP.W   #49,D0
  3399.     BEQ.S   .LSD            ; LOGICAL SHIFT [direction], not LSD ;)
  3400.     CMP.W   #50,D0
  3401.     BEQ.S   .LSD
  3402.     SUBQ.L  #2,A3
  3403.     RTS
  3404. .AO:
  3405.     SUB.W   #IOFF+18,D0
  3406.     BRA.S   .AOB
  3407. .LSD:
  3408.     SUB.W   #36,D0
  3409.     BRA.S   .AOB
  3410.  
  3411. .MOVE:
  3412.     MOVE.L  (A3)+,D1
  3413.     BRA .XB
  3414. .ADD:
  3415.     ADD.L   (A3)+,D1
  3416.     BRA .XB
  3417. .SUB:
  3418.     SUB.L   (A3)+,D1
  3419.     BRA .XB
  3420. .AND:
  3421.     AND.L   (A3)+,D1
  3422.     BRA .XB
  3423. .OR:
  3424.     OR.L    (A3)+,D1
  3425.     BRA .XB
  3426. .LSL:
  3427.     MOVE.L  (A3)+,D4
  3428.     LSL.L   D4,D1
  3429.     BRA .XB
  3430. .LSR:
  3431.     MOVe.L  (A3)+,D4
  3432.     LSR.L   D4,D1
  3433.     BRA .XB
  3434. .MUL:   MOVE.L  (A3)+,D4
  3435.     MOVE.L  D4,D2
  3436.     MOVE.L  D4,D3
  3437.     MULU    D1,D4
  3438.     SWAP    D3
  3439.     MULU    D1,D3
  3440.     SWAP    D3
  3441.     CLR.W   D3
  3442.     ADD.L   D3,D4
  3443.     SWAP    D1
  3444.     MULU    D1,D2
  3445.     SWAP    D2
  3446.     CLR.W   D2
  3447.     ADD.L   D2,D4
  3448.     MOVE.L  D4,D1
  3449.     BRA .XB
  3450.  
  3451. ;.DIV:  MOVE.L  (A3)+,D4
  3452. ;   MOVEQ   #32,D3
  3453. ;   MOVEQ   #0,D2
  3454. ;.D1:   SUB.L   D4,D2
  3455. ;   BCC.B   .D2
  3456. ;   ADD.L   D4,D2
  3457. ;.D2:   ROXL.L  #1,D1
  3458. ;   ROXL.L  #1,D2
  3459. ;   DBF     D3,.D1
  3460. ;   NOT.L   D1
  3461. ;   BRA .XB
  3462.  
  3463. .DIV:   MOVE.L  D1,-(A7)
  3464.     MOVE.L  (A3)+,-(A7)
  3465.     TST.L   (A7)
  3466.     BEQ iERROR15
  3467.     JSR I_DIV
  3468.     ADDQ.L  #8,A7
  3469.     MOVE.L  D0,D1
  3470.     BRA .XB
  3471. ;*-*
  3472. ;*-*
  3473. ;; PPC ASM
  3474. PASM_COMPILE:
  3475.     MOVEM.L A2/A5,-(A7)
  3476.     MOVE.W  #31,PASM_RC_BIT
  3477.     CLR.W   PASM_RC_FLG
  3478.     MOVE.L  (A3)+,D7
  3479.     MOVE.W  (A3)+,PASM_RC_FLG
  3480.     LSL.L   #2,D7
  3481.     LEA     PPC_INSJOB,A0
  3482.     MOVE.L  0(A0,D7),A5
  3483. .DO:MOVEQ   #0,D7
  3484.     MOVE.W  (A5)+,D7
  3485.     BEQ     .X
  3486.     SUBQ.L  #1,D7
  3487.     LSL.W   #2,D7
  3488.     LEA     .JOB(PC),A2
  3489.     MOVE.L  (A2,D7),A2
  3490.     JSR     (A2)
  3491.     BRA     .DO
  3492. .X: MOVEM.L (A7)+,A2/A5
  3493.     RTS
  3494. .JOB:
  3495.     DC.L    PASM_CODE,ASM_COMMA,PASM_ASKGPR,PASM_SETRC,PASM_DORC
  3496.     DC.L    PASM_GETSIMM,PASM_DISRC,PASM_GPRORZERO,PASM_REQUESTRC
  3497.     DC.L    PASM_NOTIMPL,PASM_GET5BIT,PASM_GETCRF,PASM_GETBIT
  3498.     DC.L    PASM_GETDBL5,PASM_GETFPR,PASM_GETCRFD,PASM_RELATIVE
  3499.     DC.L    PASM_GETSPR,PASM_GET4BIT,PASM_GETTB,PASM_GETXBIT
  3500.     DC.L    PASM_DBLGPR,PASM_SPLIT6BIT,PASM_LABEL,PASM_ABSOLUTE
  3501. PASM_RC_BIT:
  3502.     DC.W    31
  3503. PASM_RC_FLG:
  3504.     DC.W    0
  3505.  
  3506. ;; Code
  3507. PASM_CODE:
  3508.     MOVEQ   #0,D7
  3509.     MOVE.W  (A5)+,D7
  3510.     SUBQ.L  #1,D7
  3511.     CLR.L   (A4)
  3512. .1: MOVEQ   #0,D0
  3513.     MOVE.W  (A5)+,D0
  3514.     MOVE.L  #31,D1
  3515.     SUB.W   (A5)+,D1
  3516.     LSL.L   D1,D0
  3517.     OR.L    D0,(A4)
  3518.     DBF     D7,.1
  3519.     ADDQ.L  #4,A4
  3520.     RTS
  3521. ;*-*
  3522. ;; Ask for GeneralPurposeRegister
  3523. PASM_ASKGPR:
  3524.     CMP.W   #47,(A3)+
  3525.     BNE     iERROR100
  3526.     MOVEQ   #0,D0
  3527.     MOVE.W  (A3)+,D0
  3528.     MOVEQ   #$3B,D1
  3529.     SUB.L   D1,D0
  3530.     BMI     iERROR100
  3531.     CMP.W   #$20,D0
  3532.     BPL     iERROR100
  3533.     moveq   #31,d1
  3534.     sub.w  (a5)+,d1
  3535.     lsl.l   d1,d0
  3536.     or.l    d0,-4(a4)
  3537.     rts
  3538. ;*-*
  3539. ;; Set RC
  3540. PASM_SETRC:
  3541.     MOVE.W  (A5)+,PASM_RC_BIT
  3542.     RTS
  3543. ;*-*
  3544. ;; Do RC
  3545. PASM_DORC:
  3546.     MOVE.W  PASM_RC_FLG(PC),D0
  3547.     AND.L   #1,D0
  3548.     MOVEQ   #31,D1
  3549.     SUB.W   PASM_RC_BIT(PC),D1
  3550.     LSL.L   D1,D0
  3551.     OR.L    D0,-4(A4)
  3552.     RTS
  3553. ;*-*
  3554. ;; Get Signed Immediate
  3555. PASM_GETSIMM:
  3556.     CMP.W   #$F00,(A3)+
  3557.     BNE     iERROR30
  3558.     BSR     ASM_GRABVALUE
  3559.     TST.L   D0
  3560.     BMI     iERROR30
  3561.     MOVE.L  D1,D0
  3562.     CHKW    D0,D1,iERROR93
  3563.     MOVEQ   #31,D7
  3564.     SUB.W   (A5)+,D7
  3565.     LSL.L   D7,D0
  3566.     OR.L    D0,-4(A4)
  3567.     RTS
  3568. ;*-*
  3569. ;; illegal RC
  3570. PASM_DISRC:
  3571.     TST.W   PASM_RC_FLG
  3572.     BNE iERROR101
  3573.     RTS
  3574. ;*-*
  3575. ;; Get GPR or zero
  3576. PASM_GPRORZERO:
  3577.     CMP.W   #VALUE,(A3)
  3578.     BEQ     .1
  3579.     CMP.W   #47,(A3)+
  3580.     BNE     iERROR100
  3581.     MOVEQ   #0,D0
  3582.     MOVE.W  (A3)+,D0
  3583.     SUB.L   #$3b,D0
  3584.     BMI     iERROR100
  3585.     CMP.L   #$20,D0
  3586.     BPL     iERROR100
  3587. .0:
  3588.     MOVEQ   #31,D1
  3589.     SUB.W   (A5)+,D1
  3590.     LSL.L   D1,D0
  3591.     OR.L    D0,-4(A4)
  3592.     RTS
  3593. .1: ADDQ.L  #2,A3
  3594.     MOVEQ   #0,D0
  3595.     TST.L   (A3)+
  3596.     BNE     iERROR100
  3597.     BRA     .0
  3598. ;*-*
  3599. ;; Request RC
  3600. PASM_REQUESTRC:
  3601.     TST.W   PASM_RC_FLG
  3602.     BEQ iERROR101
  3603.     RTS
  3604. ;*-*
  3605. ;; Not implemented
  3606. PASM_NOTIMPL:
  3607.     BRA iERROR87
  3608. ;*-*
  3609. ;; Get 5 bit immediate value
  3610. PASM_GET5BIT:
  3611.     CMP.W   #$F00,(A3)+
  3612.     BNE iERROR30
  3613.     BSR ASM_GRABVALUE
  3614.     TST.L   D0
  3615.     BMI iERROR30
  3616.     CMP.L   #$20,D1
  3617.     BPL iERROR31
  3618.     MOVEQ   #31,D0
  3619.     SUB.W   (A5)+,D0
  3620.     LSL.L   D0,D1
  3621.     OR.L    D1,-4(A4)
  3622.     RTs
  3623. ;*-*
  3624. ;; Get CRx
  3625. PASM_GETCRF:
  3626.     CMP.W   #47,(A3)
  3627.     BEQ     .2
  3628.     CMP.W   #$F00,(A3)+
  3629.     BNE iERROR102
  3630.     BSR ASM_GRABVALUE
  3631.     TST.L   D0
  3632.     BMI iERROR102
  3633.     CMP.L   #8,D1
  3634.     BPL iERROR102
  3635.     MOVEq   #31,d0
  3636.     sub.w   (a5)+,d0
  3637.     lsl.l   d0,d1
  3638.     or.l    d1,-4(a4)
  3639.     rts
  3640. .2: CMP.W   #91,2(a3)
  3641.     bpl .3
  3642.     addq.l  #4,a5
  3643.     rts
  3644. .3: addq.l  #2,a3
  3645.     moveq   #0,d1
  3646.     move.w  (a3)+,d1
  3647.     sub.l   #91,d1
  3648.     cmp.l   #8,d1
  3649.     bpl     iERROR102
  3650.     moveq   #31,d0
  3651.     sub.w   (a5)+,d0
  3652.     lsl.l   d0,d1
  3653.     or.l    d1,-4(a4)
  3654.     rts
  3655. ;*-*
  3656. ;; Get Bit
  3657. PASM_GETBIT:
  3658.     cmp.w   #$F00,(A3)+
  3659.     bne iERROR30
  3660.     bsr ASM_GRABVALUE
  3661.     tst.l   d0
  3662.     bmi iERROR30
  3663.     move.l  d1,d0
  3664.     and.l   #$FFFFFFFE,d0
  3665.     tst.l   d0
  3666.     bne iERROR31
  3667.     moveq   #31,d0
  3668.     sub.w   (a5)+,d0
  3669.     lsl.l   d0,d1
  3670.     or.l    d1,-4(a4)
  3671.     rts
  3672. ;*-*
  3673. ;; Get and double 5 bit immediate
  3674. PASM_GETDBL5:
  3675.     CMP.W   #$F00,(A3)+
  3676.     BNE iERROR30
  3677.     BSR ASM_GRABVALUE
  3678.     TST.L   D0
  3679.     BMI iERROR30
  3680.     CMP.L   #$20,D1
  3681.     BPL iERROR31
  3682.     MOVE.L  D1,D2
  3683.     MOVEQ   #31,D0
  3684.     SUB.W   (A5)+,D0
  3685.     LSL.L   D0,D1
  3686.     OR.L    D1,-4(A4)
  3687.     MOVEQ   #31,D0
  3688.     SUB.W   (A5)+,D0
  3689.     LSL.L   D0,D2
  3690.     OR.L    D2,-4(A4)
  3691.     RTs
  3692. ;*-*
  3693. ;; Get Floating point register
  3694. PASM_GETFPR
  3695.     CMP.W   #47,(A3)+
  3696.     BNE     iERROR103
  3697.     MOVEQ   #0,D0
  3698.     MOVE.W  (A3)+,D0
  3699.     MOVEQ   #99,D1
  3700.     SUB.L   D1,D0
  3701.     BMI     iERROR103
  3702.     CMP.W   #$20,D0
  3703.     BPL     iERROR103
  3704.     moveq   #31,d1
  3705.     sub.w  (a5)+,d1
  3706.     lsl.l   d1,d0
  3707.     or.l    d0,-4(a4)
  3708.     rts
  3709. ;*-*
  3710. ;; Get CRFx
  3711. PASM_GETCRFD:
  3712.     CMP.W   #47,(A3)
  3713.     BEQ     .2
  3714.     CMP.W   #$F00,(A3)+
  3715.     BNE iERROR102
  3716.     BSR ASM_GRABVALUE
  3717.     TST.L   D0
  3718.     BMI iERROR104
  3719.     CMP.L   #8,D1
  3720.     BPL iERROR104
  3721.     MOVEq   #31,d0
  3722.     sub.w   (a5)+,d0
  3723.     lsl.l   d0,d1
  3724.     or.l    d1,-4(a4)
  3725.     rts
  3726. .2: CMP.W   #131,2(a3)
  3727.     bpl .3
  3728.     addq.l  #4,a5
  3729.     rts
  3730. .3: addq.l  #2,a3
  3731.     moveq   #0,d1
  3732.     move.w  (a3)+,d1
  3733.     sub.l   #131,d1
  3734.     cmp.l   #8,d1
  3735.     bpl     iERROR104
  3736.     moveq   #31,d0
  3737.     sub.w   (a5)+,d0
  3738.     lsl.l   d0,d1
  3739.     or.l    d1,-4(a4)
  3740.     rts
  3741. ;*-*
  3742. ;; Get GPR or zero
  3743. PASM_RELATIVE:
  3744.     CMP.W   #VALUE,(A3)
  3745.     BNE     .brkt
  3746.     BSR ASM_GRABVALUE
  3747.     TST.L   D0
  3748.     BMI iERROR73
  3749.     MOVE.L  D1,D0
  3750.     SWAP    D0
  3751.     TST.W   D0
  3752.     BNE iERROR93
  3753.     MOVEQ   #31,D0
  3754.     SUB.W   (A5),D0
  3755.     AND.W   2(A5),D1
  3756.     LSL.L   D0,D1
  3757.     OR.L    D1,-4(A4)
  3758.     CMP.W   #17,(A3)
  3759.     BNE     .XIT
  3760. .brkt:
  3761.     CMP.W   #17,(A3)+
  3762.     BNE iERROR19
  3763.     CMP.W   #47,(A3)+
  3764.     BNE     iERROR100
  3765.     MOVEQ   #0,D0
  3766.     MOVE.W  (A3)+,D0
  3767.     SUB.L   #$3b,D0
  3768.     BMI     iERROR100
  3769.     CMP.L   #$20,D0
  3770.     BPL     iERROR100
  3771.     MOVEQ   #31,D1
  3772.     SUB.W   4(A5),D1
  3773.     LSL.L   D1,D0
  3774.     OR.L    D0,-4(A4)
  3775.     CMP.W   #18,(A3)+
  3776.     BNE iERROR74
  3777. .XIT:
  3778.     ADDQ.L  #6,A5
  3779.     RTS
  3780. ;*-*
  3781. ;; Get SPR
  3782. PASM_GETSPR:
  3783.     CMP.W   #47,(A3)
  3784.     BEQ     .2
  3785.     CMP.W   #$F00,(A3)+
  3786.     BNE iERROR105
  3787.     BSR ASM_GRABVALUE
  3788.     TST.L   D0
  3789.     BMI iERROR105
  3790.     CMP.L   #1024,D1
  3791.     BPL iERROR105
  3792.     MOVE.L  D1,D2
  3793.     AND.L   #%11111,D2
  3794.     LSR.L   #5,D1
  3795.     LSL.L   #5,D2
  3796.     OR.L    D2,D1
  3797.     MOVEq   #31,d0
  3798.     sub.w   (a5)+,d0
  3799.     lsl.l   d0,d1
  3800.     or.l    d1,-4(a4)
  3801.     rts
  3802. .2: CMP.W   #139,2(a3)
  3803.     bpl .3
  3804.     BRA iERROR105
  3805. .3: addq.l  #2,a3
  3806.     moveq   #0,d1
  3807.     move.w  (a3)+,d1
  3808.     sub.l   #139,d1
  3809.     cmp.l   #32,d1
  3810.     bpl     iERROR105
  3811.     LEA .TAB(PC),A0
  3812.     lsl.l   #1,d1
  3813.     move.w  (a0,d1),d1
  3814.     and.l   #$3FF,D1
  3815.     MOVE.L  D1,D2
  3816.     AND.L   #%11111,D2
  3817.     LSR.L   #5,D1
  3818.     LSL.L   #5,D2
  3819.     OR.L    D2,D1
  3820.     moveq   #31,d0
  3821.     sub.w   (a5)+,d0
  3822.     lsl.l   d0,d1
  3823.     or.l    d1,-4(a4)
  3824.     rts
  3825. .TAB:
  3826.     DC.W    001,008,009,018,019,022,025,026,027,272,273,274
  3827.     DC.W    275,280,282,287,528,529,530,531,532,533,534,535
  3828.     DC.W    536,537,538,539,540,541,542,543,1013
  3829. ;*-*
  3830. ;; Get 4 bit immediate value
  3831. PASM_GET4BIT:
  3832.     CMP.W   #$F00,(A3)+
  3833.     BNE iERROR30
  3834.     BSR ASM_GRABVALUE
  3835.     TST.L   D0
  3836.     BMI iERROR30
  3837.     CMP.L   #$10,D1
  3838.     BPL iERROR31
  3839.     MOVEQ   #31,D0
  3840.     SUB.W   (A5)+,D0
  3841.     LSL.L   D0,D1
  3842.     OR.L    D1,-4(A4)
  3843.     RTs
  3844. ;*-*
  3845. ;; GetTimeBase
  3846. PASM_GETTB:
  3847.     CMP.W   #COM,(A3)
  3848.     BNE     .DEFTB
  3849.     ADDQ.L  #2,A3
  3850.     CMp.W   #47,(A3)+
  3851.     BNE     .VAL
  3852.     MOVEQ   #0,D1
  3853.     MOVE.W  (A3)+,D1
  3854.     SUB.L   #172,D1
  3855.     BMI     iERROR106
  3856.     CMP.W   #2,D1
  3857.     BPL     iERROR106
  3858.     ADD.L   #268,D1
  3859. .FINE:
  3860.     MOVE.L  D1,D0
  3861.     LSR.L   #5,D1
  3862.     AND.L   #31,d0
  3863.     LSL.L   #5,D0
  3864.     OR.L    D0,D1
  3865.     MOVEQ   #31,D0
  3866.     SUB.W   (A5)+,D0
  3867.     LSL.L   D0,D1
  3868.     OR.L    D1,-4(A4)
  3869.     RTS
  3870. .VAL:
  3871.     CMP.W   #VALUE,-2(A3)
  3872.     BNE     iERROR106
  3873.     MOVE.L  (A3)+,D1
  3874.     cmp.l   #268,d1
  3875.     bmi     iERROR106
  3876.     cmp.l   #270,d1
  3877.     bpl     iERROR106
  3878.     bra     .FINE
  3879. .DEFTB:
  3880.     MOVE.L  #268,D1
  3881.     bra     .FINE
  3882. ;*-*
  3883. ;; Get x bit immediate value
  3884. PASM_GETXBIT:
  3885.     CMP.W   #$F00,(A3)+
  3886.     BNE iERROR30
  3887.     BSR ASM_GRABVALUE
  3888.     TST.L   D0
  3889.     BMI iERROR30
  3890.     MOVEQ   #0,D0
  3891.     MOVEQ   #0,D2
  3892.     MOVE.W  (A5)+,D2
  3893.     BSET    D2,D0
  3894.     CMP.L   D0,D1
  3895.     BPL iERROR31
  3896.     MOVEQ   #31,D0
  3897.     SUB.W   (A5)+,D0
  3898.     LSL.L   D0,D1
  3899.     OR.L    D1,-4(A4)
  3900.     RTs
  3901. ;*-*
  3902. ;; Get & double the GPR.
  3903. PASM_DBLGPR:
  3904.     CMP.W   #47,(A3)+
  3905.     BNE     iERROR100
  3906.     MOVEQ   #0,D0
  3907.     MOVE.W  (A3)+,D0
  3908.     MOVEQ   #$3B,D1
  3909.     SUB.L   D1,D0
  3910.     BMI     iERROR100
  3911.     CMP.W   #$20,D0
  3912.     BPL     iERROR100
  3913.     move.l  d0,d2
  3914.     moveq   #31,d1
  3915.     sub.w  (a5)+,d1
  3916.     lsl.l   d1,d0
  3917.     or.l    d0,-4(a4)
  3918.     moveq   #31,d1
  3919.     sub.w   (a5)+,d1
  3920.     lsl.l   d1,d2
  3921.     or.l    d2,-4(a4)
  3922.     rts
  3923. ;*-*
  3924. ;; Get & split 6 bit immediate value
  3925. PASM_SPLIT6BIT:
  3926.     CMP.W   #$F00,(A3)+
  3927.     BNE iERROR30
  3928.     BSR ASM_GRABVALUE
  3929.     TST.L   D0
  3930.     BMI iERROR30
  3931.     CMP.L   #$40,D1
  3932.     BPL iERROR31
  3933.     MOVE.L  D1,D2
  3934.     LSR.L   #5,D2
  3935.     MOVEQ   #31,D0
  3936.     SUB.W   (A5)+,D0
  3937.     LSL.L   D0,D2
  3938.     or.l    d2,-4(a4)
  3939.     AND.L   #31,D1
  3940.     MOVEQ   #31,d0
  3941.     sub.w   (a5)+,d0
  3942.     lsl.l   d0,d1
  3943.     OR.L    D1,-4(A4)
  3944.     RTs
  3945. ;*-*
  3946. ;; Get label
  3947. PASM_LABEL:
  3948.     CMP.W   #IDENT,(A3)+
  3949.     BNE     iERROR4
  3950.     MOVE.L  (A3)+,A1
  3951.     MOVe.W  10(A1),D0
  3952.     CLR.W   NEWOP
  3953.     BSR     ADDBRANCH
  3954.     RTS
  3955. ;*-*
  3956. ;; Get absolute
  3957. PASM_ABSOLUTE:
  3958.     CMP.W   #VALUE,(A3)+
  3959.     BNE     iERROR73
  3960.     MOVE.L  (A3)+,D0
  3961.     btst    #0,d0
  3962.     bne     iERROR0
  3963.     btst    #1,d0
  3964.     bne     iERROR0
  3965.     cmp.l   #$4000000,d0
  3966.     bpl     iERROR31
  3967.     or.l    d0,-4(a4)
  3968.     rts
  3969. ;*-*
  3970. ;; Get label 16bit
  3971. PASM_LAB16B:
  3972.     CMP.W   #IDENT,(A3)+
  3973.     BNE     iERROR4
  3974.     MOVE.L  (A3)+,A1
  3975.     MOVe.W  10(A1),D0
  3976.     CLR.W   NEWOP
  3977.     BSR     ADDBRANCH
  3978.     RTS
  3979. ;*-*
  3980. ;; Get absolute 16bit
  3981. PASM_ABS16B:
  3982.     CMP.W   #VALUE,(A3)+
  3983.     BNE     iERROR73
  3984.     MOVE.L  (A3)+,D0
  3985.     btst    #0,d0
  3986.     bne     iERROR0
  3987.     btst    #1,d0
  3988.     bne     iERROR0
  3989.     cmp.l   #$10000,d0
  3990.     bpl     iERROR31
  3991.     or.l    d0,-4(a4)
  3992.     rts
  3993. ;*-*
  3994. ;*-*
  3995.  
  3996.